转载自Ubuntu中文论坛(原文地址:http://forum.ubuntu.org.cn/viewtopic.php?t=88369)
原文作者: wenwu
首先感谢http://hi.baidu.com/zkheartboy/blog/item/a73927ad3629c9094a36d6f1.html上提供的方法,我在写这篇文章的时候参考了作者的一些方法。
下面的所有操作,在 ubuntu7.10下全部调试通过。
但仅供参考!
我在写的时候,将shell命令完整部分都粘贴了下来,希望你能看清我在操作时的一些路径,这个很重要。
另外,我也是新手~
我写出来,一是希望能帮助其他像我一样的新手,二是希望自己能够从中学到更多的东西。也希望有更多的人能将自己的经历写下来,共同交流!
一、搭建开发环境
在www.uclinux.org上下载以下两个包:
交叉开发工具:arm-elf-tools-20040427.sh
uClinux的源码包:uClinux-dist-20040408.tar.gz
好像现在arm-elf-tools-20040427.sh不太好下,你也可以下载arm-elf-tools-20030314.sh
安装交叉开发工具:进入arm-elf-tools-20040427.sh所在的目录,执行以下命令进行安装:
代码: |
$sudo chmod +x arm-elf-tools-20040427.sh $sudo ./arm-elf-tools-20040427.sh |
代码: |
$tar zxvf uClinux-dist-20040408.tar.gz |
代码: |
wenwu@wenwu-desktop:~$ sudo apt-get install skyeye |
代码: |
**************************** WARNING ********************************** If you want to run ELF image, you should use -e option to indicate your elf-format image filename. Or you only want to run binary image, you need to set the filename of the image and its entry in skyeye.conf. *********************************************************************** big_endian is false. Failed to open skyeye config file skyeye.conf in the same directory error: No such file or directory ------------------------- SkyEye -V1.2 --------------------------- Usage: SkyEye [options] -e program [program args] Default mode is STANDALONE mode ------------------------------------------------------------------ Options: -e exec-file the (ELF executable format)kernel file name. -l load_address,load_address_mask Load ELF file to another address, not its entry. -b specify the data type is big endian when non "-e" option. -d in GDB Server mode (can be connected by GDB). -c config-file the skyeye configure file name. -h The SkyEye command options, and ARCHs and CPUs simulated. ------------------------------------------------------------------ ----------- Architectures and CPUs simulated by SkyEye------------- -------- ARM architectures --------- at91 lpc s3c4510b s3c44b0x s3c44b0 s3c3410x ep7312 lh79520 ep9312 cs89712 sa1100 pxa_lubbock pxa_mainstone at91rm92 s3c2410x s3c2440 sharp_lh7a400 ns9750 lpc2210 ps7500 integrator -------- BlackFin architectures ---- bf533 |
代码: |
$gedit /etc/environment |
代码: |
/*test.c*/ #include <stdio.h> int main() { int i; for(i=0;i<6;i++) { printf("i=%d\n",i); printf("Hello,embedded linux!\n"); } return 0; } |
代码: |
wenwu@wenwu-desktop:/source/work/test$ arm-elf-gcc -Wl,-elf2flt -o test test.c wenwu@wenwu-desktop:/source/work/test$ ls test test.c test.gdb |
代码: |
#begin CC=arm-elf-gcc LDFLAGS=-Wl,-elf2flt LIBS= OBJS=test.o all:test hello:$(OBJS) $(CC) $(CFLAGS) $(LDFLAGS) -o hello $(OBJS) clean: rm -rf *.o *.elf *.gdb test #end |
代码: |
wenwu@wenwu-desktop:/source/work/test$ file test test: BFLT executable - version 4 ram |
代码: |
wenwu@wenwu-desktop:/source/work/test$ ./test bash: ./test:无法执行二进制文件 |
代码: |
wenwu@wenwu-desktop:/source/work/test$ arm-elf-gcc -S -o test.S test.c wenwu@wenwu-desktop:/source/work/test$ file test.S test.S: ASCII assembler program text |
代码: |
wenwu@wenwu-desktop:/source$ tar jxvf skyeye-binary-testutils-1.2.0.tar.bz2 |
代码: |
wenwu@wenwu-desktop:/source$ ls skyeye-binary-testutils-1.2.0/at91x40/uclinux2 boot.rom linux readme skyeye.conf |
代码: |
skyeye -e linux |
代码: |
____ _ _ / __| ||_| _ _| | | | _ ____ _ _ _ _ | | | | | | || | _ \| | | |\ \/ / | |_| | |__| || | | | | |_| |/ \ | ___\____|_||_|_| |_|\____|\_/\_/ | | |_| |
代码: |
wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ mkdir romfs wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ ls boot.rom linux readme romfs skyeye.conf |
代码: |
wenwu@wenwu-desktop:/mnt$ ls wenwu@wenwu-desktop:/mnt$ sudo mkdir tmp wenwu@wenwu-desktop:/mnt$ ls tmp |
代码: |
wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ sudo mount -o loop boot.rom /mnt/tmp/ wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ ls /mnt/tmp/ bin dev etc home lib mnt proc sbin tmp usr var |
代码: |
wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ sudo cp -r /mnt/tmp/* ./romfs/ |
代码: |
wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ ls romfs/ bin dev etc home lib mnt proc sbin tmp usr var |
代码: |
wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ sudo cp /source/work/test/test romfs/bin/ wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ ls romfs/bin/ boa dhcpcd ftp gdbserver inetd login ping route telnet test busybox expand ftpd ifconfig init mount reboot sh telnetd umount |
代码: |
wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ sudo genromfs -f boot.rom -d ./romfs/ wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ ls -l boot.rom -rw-r--r-- 1 wenwu wenwu 1561600 2007-11-11 14:03 boot.rom |
代码: |
wenwu@wenwu-desktop:/source/skyeye-binary-testutils-1.2.0/at91x40/uclinux2$ skyeye -e linux big_endian is false. arch: arm cpu info: armv3, arm7tdmi, 41007700, fff8ff00, 0 mach info: name at91, mach_init addr 0x8057550 ethmod num="1", mac addr="0:4:3:2:1:f", hostip="10".0.0.1 can't find device module: (name:net, typenull)) log_info: log is off. log_info:log file is /tmp/test.log, fd is 0x80f9318 log_info: log start clock 3200000 log_info: log end clock 3330000 uart_mod:0, desc_in:, desc_out:, converter: SKYEYE: use arm7100 mmu ops Loaded ROM ./boot.rom start addr is set to 0x01000000 by exec file. Linux version 2.4.20-uc0 (chy@localhost.localdomain) (gcc version 2.95.3 20010315 (release)(ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches from http://www.snapgear.com/)) #7 �� 8�� 1 19:43:07 CST 2003 Processor: Atmel AT91M40xxx revision 0 Architecture: EB01 On node 0 totalpages: 1024 zone(0): 0 pages. zone(1): 1024 pages. zone(2): 0 pages. Kernel command line: root="/dev/rom0" Calibrating delay loop... 12.97 BogoMIPS Memory: 4MB = 4MB total Memory: 2984KB available (833K code, 181K data, 40K init) Dentry cache hash table entries: 512 (order: 0, 4096 bytes) Inode cache hash table entries: 512 (order: 0, 4096 bytes) Mount-cache hash table entries: 512 (order: 0, 4096 bytes) Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes) Page-cache hash table entries: 1024 (order: 0, 4096 bytes) POSIX conformance testing by UNIFIX Linux NET4.0 for Linux 2.4 Based upon Swansea University Computer Society NET3.039 Initializing RT netlink socket Starting kswapd Atmel USART driver version 0.99 ttyS0 at 0xfffd0000 (irq = 2) is a builtin Atmel APB USART ttyS1 at 0xfffcc000 (irq = 3) is a builtin Atmel APB USART Blkmem copyright 1998,1999 D. Jeff Dionne Blkmem copyright 1998 Kenneth Albanowski Blkmem 1 disk images: 0: 1400000-157D3FF [VIRTUAL 1400000-157D3FF] (RO) RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize SkyEye NE2k Ethernet driver version 0.2 (2003-04-27) sene2k dev name: eth0: <6>NET4: Linux TCP/IP 1.0 for NET4.0 IP Protocols: ICMP, UDP, TCP IP: routing cache hash table of 512 buckets, 4Kbytes TCP: Hash tables configured (established 512 bind 512) NET4: Unix domain sockets 1.0/SMP for Linux NET4.0. sys_mount:dev_name /dev/root,dir_name /root, type ext2, flag 0x8001, data 0 sys_mount:1 data_page 1122000, type_page 113bf74, dev_page 0, dir_page 8001 sys_mount:2 data_page 0, type_page 117f000, dev_page 117d000, dir_page 117e000 sys_mount:3 data_page 0, type_page 117f000, dev_page 117d000, dir_page 117e000 sys_mount:4 data_page 0, type_page 117f000, dev_page 117d000, dir_page 117e000 sys_mount:dev_name /dev/root,dir_name /root, type romfs, flag 0x8001, data 0 sys_mount:1 data_page 0, type_page 117f000, dev_page 117d000, dir_page 8001 sys_mount:2 data_page 0, type_page 117f000, dev_page 117d000, dir_page 117e000 sys_mount:3 data_page 0, type_page 117f000, dev_page 117d000, dir_page 117e000 sys_mount:4 data_page 0, type_page 117f000, dev_page 117d000, dir_page 117e000 VFS: Mounted root (romfs filesystem) readonly. sys_mount:dev_name .,dir_name /, type <NULL>, flag 0x2000, data 0 sys_mount:1 data_page 111c120, type_page 0, dev_page 10e5d00, dir_page 10e5174 sys_mount:2 data_page 0, type_page 0, dev_page 117f000, dir_page 1122000 sys_mount:3 data_page 0, type_page 0, dev_page 117f000, dir_page 1122000 sys_mount:4 data_page 0, type_page 0, dev_page 117f000, dir_page 1122000 Shell invoked to run file: /etc/rc Command: hostname GDB-ARMulator Command: /bin/expand /etc/ramfs.img /dev/ram0 Command: mount -t proc proc /proc sys_mount:dev_name /proc,dir_name /proc, type proc, flag 0xc0ed0000, data 11d0008 sys_mount:1 data_page 1000, type_page 1002, dev_page 118a008, dir_page c0ed0000 sys_mount:2 data_page 1188000, type_page 11a0000, dev_page 1189000, dir_page 1122000 sys_mount:3 data_page 1188000, type_page 11a0000, dev_page 1189000, dir_page 1122000 sys_mount:4 data_page 1188000, type_page 11a0000, dev_page 1189000, dir_page 1122000 mount: /etc/mtab: Read-only file system Command: mount -t ext2 /dev/ram0 /var sys_mount:dev_name /dev/ram0,dir_name /var, type ext2, flag 0xc0ed0000, data 11d0008 sys_mount:1 data_page 111c260, type_page 119fe40, dev_page 0, dir_page c0ed0000 sys_mount:2 data_page 1186000, type_page 1188000, dev_page 1187000, dir_page 1122000 sys_mount:3 data_page 1186000, type_page 1188000, dev_page 1187000, dir_page 1122000 sys_mount:4 data_page 1186000, type_page 1188000, dev_page 1187000, dir_page 1122000 mount: /etc/mtab: Read-only file system Command: mkdir /var/tmp Command: mkdir /var/log Command: mkdir /var/run Command: mkdir /var/lock Command: cat /etc/motd Welcome to ____ _ _ / __| ||_| _ _| | | | _ ____ _ _ _ _ | | | | | | || | _ \| | | |\ \/ / | |_| | |__| || | | | | |_| |/ \ | ___\____|_||_|_| |_|\____|\_/\_/ | | |_| GDB/ARMulator support by <davidm@snapgear.com> For further information check: http://www.uclinux.org/ Command: /bin/ifconfig eth0 up 10.0.0.2 Execution Finished, Exiting Sash command shell (version 1.1.1) /> |
代码: |
/> cd bin /bin> ./test i=0 Hello,embedded linux! i=1 Hello,embedded linux! i=2 Hello,embedded linux! i=3 Hello,embedded linux! i=4 Hello,embedded linux! i=5 Hello,embedded linux! /bin> |
代码: |
tar zxvf uClinux-dist-20040408.tar.gz |
代码: |
wenwu@wenwu-desktop:/source/uClinux-dist$ make menuconfig config/mkconfig > config.in make -C /source/uClinux-dist/config/scripts/lxdialog all make[1]: Entering directory `/source/uClinux-dist/config/scripts/lxdialog' /usr/bin/ld: cannot find -lncurses collect2: ld 返回 1 -e >> Unable to find the Ncurses libraries. >> >> You must have Ncurses installed in order >> to use 'make menuconfig' make[1]: *** [ncurses] 错误 1 make[1]: Leaving directory `/source/uClinux-dist/config/scripts/lxdialog' make: *** [menuconfig] 错误 2 wenwu@wenwu-desktop:/source/uClinux-dist$ |
代码: |
wenwu@wenwu-desktop:/source/uClinux-dist$ sudo make xconfig config/mkconfig > config.in make -C /source/uClinux-dist/config/scripts tkparse make[1]: Entering directory `/source/uClinux-dist/config/scripts' make[1]: “tkparse”是最新的。 make[1]: Leaving directory `/source/uClinux-dist/config/scripts' ARCH=dummy /source/uClinux-dist/config/scripts/tkparse < config.in > config.tmp cat /source/uClinux-dist/config/scripts/header.tk >> ./config.tk cat config.tmp >> config.tk rm -f config.tmp echo "set defaults \"/dev/null\"" >> config.tk echo "set help_file \"config/Configure.help\"" >> config.tk cat /source/uClinux-dist/config/scripts/tail.tk >> config.tk chmod 755 config.tk make: wish:命令未找到 make: *** [xconfig] 错误 127 |
代码: |
--- Select the Vendor you wish to target (GDB) Vendor --- Select the Product you wish to target (ARMulator) GDB Products |
代码: |
(linux-2.4.x) Kernel Version (uC-libc) Libc Version [ ] Default all settings (lose changes) [ ] Customize Kernel Settings [ ] Customize Vendor/User Settings [ ] Update Default Vendor Settings |
代码: |
Do you wish to save your new kernel configuration? < Yes > < No > |
代码: |
arm/clone.S: Assembler messages: arm/clone.S:34: Error: undefined symbol `EINVAL' in operation make[3]: *** [arm/clone.o] 错误 1 make[3]: Leaving directory `/source/uClinux-dist/lib/libc/sysdeps' make[2]: *** [subdirs] 错误 1 make[2]: Leaving directory `/source/uClinux-dist/lib/libc' make[1]: *** [all] 错误 2 make[1]: Leaving directory `/source/uClinux-dist/lib' make: *** [subdirs] 错误 1 |
代码: |
(uClibc) Libc Version |
代码: |
make dep make |
代码: |
#skyeye config file sample cpu: arm7tdmi mach: at91 mem_bank: map="M", type="RW", addr="0x00000000", size="0x00004000" mem_bank: map="M", type="RW", addr="0x01000000", size="0x00400000" mem_bank: map="M", type="R", addr="0x01400000", size="0x00400000", file=./boot.rom mem_bank: map="M", type="RW", addr="0x02000000", size="0x00400000" mem_bank: map="M", type="RW", addr="0x02400000", size="0x00008000" mem_bank: map="M", type="RW", addr="0x04000000", size="0x00400000" mem_bank: map="I", type="RW", addr="0xf0000000", size="0x10000000" |
代码: |
wenwu@wenwu-desktop:/source/uClinux-dist$ ln -s images/romfs.img boot.rom |
代码: |
wenwu@wenwu-desktop:/source/uClinux-dist$ skyeye -e linux-2.4.x/linux big_endian is false. arch: arm cpu info: armv3, arm7tdmi, 41007700, fff8ff00, 0 mach info: name at91, mach_init addr 0x8057550 uart_mod:0, desc_in:, desc_out:, converter: SKYEYE: use arm7100 mmu ops Loaded ROM ./boot.rom start addr is set to 0x01000000 by exec file. Linux version 2.4.24-uc0 (wenwu@wenwu-desktop) (gcc version 2.95.3 20010315 (release)(ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches from http://www.snapgear.com/)) #2 2007年 11月 11日 星期日 16:21:16 CST Processor: Atmel AT91M40xxx revision 0 Architecture: EB01 On node 0 totalpages: 1024 zone(0): 0 pages. zone(1): 1024 pages. zone(2): 0 pages. Kernel command line: root="/dev/rom0" Calibrating delay loop... 15.82 BogoMIPS Memory: 4MB = 4MB total Memory: 2968KB available (850K code, 180K data, 40K init) Dentry cache hash table entries: 512 (order: 0, 4096 bytes) Inode cache hash table entries: 512 (order: 0, 4096 bytes) Mount cache hash table entries: 512 (order: 0, 4096 bytes) Buffer cache hash table entries: 1024 (order: 0, 4096 bytes) Page-cache hash table entries: 1024 (order: 0, 4096 bytes) POSIX conformance testing by UNIFIX Linux NET4.0 for Linux 2.4 Based upon Swansea University Computer Society NET3.039 Initializing RT netlink socket Starting kswapd Atmel USART driver version 0.99 ttyS0 at 0xfffd0000 (irq = 2) is a builtin Atmel APB USART ttyS1 at 0xfffcc000 (irq = 3) is a builtin Atmel APB USART Blkmem copyright 1998,1999 D. Jeff Dionne Blkmem copyright 1998 Kenneth Albanowski Blkmem 1 disk images: 0: 1400000-14AC3FF [VIRTUAL 1400000-14AC3FF] (RO) RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize NET4: Linux TCP/IP 1.0 for NET4.0 IP Protocols: ICMP, UDP, TCP IP: routing cache hash table of 512 buckets, 4Kbytes TCP: Hash tables configured (established 512 bind 512) NET4: Unix domain sockets 1.0/SMP for Linux NET4.0. VFS: Mounted root (romfs filesystem) readonly. Shell invoked to run file: /etc/rc Command: hostname GDB-ARMulator Command: /bin/expand /etc/ramfs.img /dev/ram0 Command: mount -t proc proc /proc Command: mount -t ext2 /dev/ram0 /var Command: mkdir /var/tmp Command: mkdir /var/log Command: mkdir /var/run Command: mkdir /var/lock Command: mkdir /var/empty Command: cat /etc/motd Welcome to ____ _ _ / __| ||_| _ _| | | | _ ____ _ _ _ _ | | | | | | || | _ \| | | |\ \/ / | |_| | |__| || | | | | |_| |/ \ | ___\____|_||_|_| |_|\____|\_/\_/ | | |_| GDB/ARMulator support by <davidm@snapgear.com> For further information check: http://www.uclinux.org/ Execution Finished, Exiting Sash command shell (version 1.1.1) /> |
文章评论(0条评论)
登录后参与讨论