2009年7月1日星期三
arm交叉编译bash和python
目标机器是EABI,armv4t
一.bash
下载代码
http://core.ring.gr.jp/pub/GNU/bash/bash-3.2.48.tar.gz
配置
CC=arm-linux-gcc CFLAGS=-mabi=aapcs-linux ./configure --host=arm-unknown-linux --target=arm-unknow-linux --build=i686-unknown-linux
编译
make
确认库和二进制程序
readelf -h bash 确认abi版本和目标机器
readelf -d bash 确认使用的共享库
如果是静态编译,就不用确认共享库了。
二.python
下载代码
python-2.6.2
配置和bash一样。但,如果出现交叉编译无法执行程序的错误时,把configure文件中对应部分注释掉。
通过后,make编译。
2009年6月29日星期一
编译arm平台的ethtool
git clone git://git.kernel.org/pub/scm/network/ethtool/ethtool.git
2.准备交叉编译工具
可以从codesoucery下载
3.编译
假设目标机器的规格如下:
ABI: EABI version 4
little endian
armv5te
按如下顺序运行:
./autogen.sh
./configure CC=CROSS-COMPILER PATH CFLAGS=-march=armv5te --host=arm-xx-linux
如果需要静态编译则
打开vim Makefile 在CC= CROSS-COMPILER后面加上--static
保存
make
就在当前文件夹内生成一个可执行文件ethtool
确认编译后的文件
readelf -h ethtool
确认以下信息(具体内容要看自己的配置了)
OS/ABI UNIX - System V
Machine :ARM
Flags Version4 EABI
2009年6月27日星期六
编译2.6.31内核和busybox1.14.2
目标板versatile。
CPU核: ARM926T,arm9tdmi
ARM指令集:armv5te
交叉编译工具:
http://www.codesourcery.com/sgpp/lite/arm/portal/package4571/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
内核配置:
先使用源码自带的
make versatile_defconfig
另外将CONFIG_AEABI选项也选择了。
配置好后,make 编译就行了。
busybox的配置。
配置时候,添加如下的附加编译器条件:
-mlittle-endian -marm -fno-omit-frame-pointer -mapcs -mno-sched-prolog
-mabi=aapcs-linux -mno-thumb-interwork -march=armv5te -mtune=arm9tdmi
-msoft-float -fno-stack-protector -fno-optimize-sibling-calls -fwrapv
编译
最后,确认下编译好的内核和busybox
查看ELF Header内核和busybox要保持一致
readelf -h vmlinux
readelf -h busybox
Version: 1 (current)
OS/ABI: UNIX -System V
ABI Version: 0
Machine: ARM
Version: 0x1
Flags: 0x5000002, has entry point, Version5 EABI
2009年6月24日星期三
My PGP Public Key ID and Fingerprint
My PGP Public Key
Version: GnuPG v2.0.10 (GNU/Linux)
mQGiBEpBhvQRBADP95PG0teyveIfFJbxl8DootgI41mOENgJ394wvB77yPLvq/lf
KUN+eq3V5IwkaX+P8u2Hf/1ZQI49Up/fSmchw4ITsgXmLsXyoZcMw373mL9o9BZp
kf8PXXKojMpUINJ976JCdJETYJUfh5EvP2cKLivw5ENdx/cdAzSoExt/LwCgiQiy
xv/jxN1HUtXm/Tjw99ig2iUD/3sXc2/ljUyw9DSwf1KTQR17eiYlLQj1OnnvnKWv
r11bzwZ6xyDNxvRnY4/QovbuBaswcVTV5piEsy0p4boKf6dEnaTF6LOeFV02ZrAu
TB1kFiWBzRnvcqcHY53XzCDo6OCM78ULI8dEt4kCW+mCCfuPqLkEUk3TO4p8U79E
0p7vA/9Kk4qBne1uKbB/GzPnMBtRF7TeDY58mNtpt/UUV40UvevpoyZ/Cn/zcrl/
Hz0sPlUAQzMQ0lnBDEHlso20DmhnbyUofW9RzV2UaF4t5++kurBAoGqxpMrXH4eE
yKm/vCy46o29NQ+n647yQbg8TZQsfO7KqgdUeTrwD9MW+dJxL7QkSGFpeWFuZyBL
YW5nIDxrYW5naGFpeWFuZ0BnbWFpbC5jb20+iGAEExECACAFAkpBhvQCGwMGCwkI
BwMCBBUCCAMEFgIDAQIeAQIXgAAKCRDYH0FaMAPo2LViAJ9Zc9d5fUzvM7ToKFBU
GUzjn/lDiQCbBJl4Z2y6+WkliEsdl5bXzPhJF8i5Ag0ESkGG9BAIAJuPwo8X+bZ9
hY5WkiIfS4BqlN+O1SpEwBoljxikcmo9t2rajiJkkEp+X6mg+cZq3q+bEt7SLGdz
Q7UIQLjcdakUy+NOobd3sodWOM+gwI5bWAP/ZHUu6ETc1EUDV7bsabsl29pwHDvF
jdZrgmg9Bc7Rg03giizvjbFiddLzQfSE23sSbxWoePq0HbwPc+rsPopmVCVw7dbZ
mMVrHqTATmTs3butlmxn529O6WCN8ob/TW//fQNZBbh5kqpTjzUO9ZeS3kD3vW9K
n71mNeUs7LwYjhczTjMclpyShbfc54IqShsTw9qBGtd27uB4ZjF0xEEc32PVSVE8
Ie2D8AYW0LcAAwcH+wdNqisKEmcAdlJ7N5BxqhjP0CXRymtPogYUbtBurSwat49q
SqDESqW8A65vo2DIDvdDz6YUaaji1EXNqNzHBSgyy4u5ekhSXe+Hhx+URw4oEDHs
0sIQpsKYuwYTFMNZHjgflsGFfYB2SDUNMgw9u+1B8k9dn8dP3jKDtgNctjJOG4ip
dR2vqVvE2bJumh94pf+1XyqQs2FfbmYB7DbURBnt0dGEGZOxPM3FRhHG1QSQHaB+
HfWhiz6Kd/mqaeOOAW3u30Wu/ZPiESgVTxGGJ8d3+VMSdWfPzAp2FmqBoRbcBueL
ljqzY08i8C2nLSodrwmpyVJWV9+f3LcXK+q+gQmISQQYEQIACQUCSkGG9AIbDAAK
CRDYH0FaMAPo2O/kAJ9DEhg9Kg4eqKDQ9yY0cBhbmM7kagCfSW0Er/De6HfYuMgq
tmrDyF5Frrw=
=lYW3
-----END PGP PUBLIC KEY BLOCK-----
2009年6月22日星期一
How To: Running Fedora-ARM under QEMU
2009年5月30日星期六
powerpc 汇编语言注释
.globl array
.section ".data" /*把array变量放到数据段*/
.align 2
.type array, @object
.size array, 24
array:
.long 21
.long 2
.long 3
.long 90
.long 10
.long 11
.section .rodata
.align 3
.LC0:
.string "%d\n"
.section ".text"
.align 2
.globl main
.type main, @function
main:
stwu 1,-32(1)
mflr 0
stw 31,28(1)
stw 0,36(1)
mr 31,1
/* r9 is the address of array*/
lis 9,array@ha /*读array地址的高16位并左移16位*/
la 9,array@l(9) /*读array地址的低16位,并将其与r9 (上条指令的执行结果)相加,得到array的地址,存放到r9中*/
li 0,0
stw 0,0(9)
li 0,1
stw 0,4(9)
li 10,2
stw 10,8(31)
1:
lwz 10,8(31)
addi 0,10,-2 /*将r10减去2,结果放到r0中*/
slwi 0,0,2
add 11,9,0
lwz 4,0(11) /*从内存加载数据到r0*/
addi 0,10,-1
slwi 0,0,2 /*将r0左移两位*/
add 11,9,0
lwz 0,0(11)
add 11,4,0
slwi 0,10,2
add 4,9,0
stw 11,0(4)
addi 0,10,1
stw 0,8(31)
cmpwi 7,0,5
ble 7,1b
li 0,0
stw 0,8(31)
b .L2
.L3:
lwz 0,8(31)
lis 9,array@ha
la 9,array@l(9)
slwi 0,0,2
add 9,0,9
lwz 0,0(9)
lis 9,.LC0@ha
la 3,.LC0@l(9)
mr 4,0
crxor 6,6,6
bl printf
lwz 9,8(31)
addi 0,9,1
stw 0,8(31)
.L2:
lwz 0,8(31)
cmpwi 7,0,5
ble 7,.L3
li 0,0
mr 3,0
lwz 11,0(1)
lwz 0,4(11)
mtlr 0
lwz 31,-4(11)
mr 1,11
blr
.size main,.-main
.ident "GCC: (GNU) 4.1.2 20071124 (Red Hat 4.1.2-42)"
.section .note.GNU-stack,"",@progbits