续:

好了,下面我们再运行skyeye进行仿真,键入:skyeye -e linux

代码:

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, type:(null))

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 p_w_picpaths:

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 , 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

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>

看到程序在运行了吗?五、编译我们的uClinux内核

首先解压

代码:

tar zxvf uClinux-dist-20040408.tar.gz

这是在你解压的目录里面会生成一个 uClinux-dist目录

shell 中进 uClinux-dist目录,执行make menuconfig进行配置,我猜你遇到了和我一样的问题:

代码:

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$

其实是没有安装ncurses开发包,安装就是了

在新立得软件管理器中找到libncurses5-dev,安装

用的朋友喜欢用make xconfig,直接运行会出现如下错误:

代码:

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

解决办法是在新立得软件包管理器中找到以下几项并安装,然后再运行make xconfig就可以看到图形界面了。

tcl8.4

tcl8.4-dev

tk8.4

k8.4-dev

然后再进行配置:在下面这个选项里面选择GDB ARMulator,怎么选择应该不用再说了吧?

代码:

--- Select the Vendor you wish to target

(GDB) Vendor

--- Select the Product you wish to target

(ARMulator) GDB Products

Kernel选择2.4内核,Libc Version选择uC-libc

代码:

(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 >     

选择Yes

这个时候就可以进行编译了,编译首先用make dep

然后用make

很不幸,我们的错误总是不断存在!

代码:

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

但有时候,就是因为这些错误使我们不断前行。

其实很多人都遇到了这个错误 ,是上面的库文件选择错了,什么?错了你还写在上面?我是想让你有更深的记忆!

make clean把上次编译过程生成的中间文件删除

然后make menuconfig

这次,我们把Libc Version换成uClibc

代码:

(uClibc) Libc Version

再重复上面的步骤:

代码:

make dep

make

这个编译过程比较长,耐心等待。

编译成功后会在uClinux-dist目录里面生成一个p_w_picpaths目录,这个目录里面有四个文件:

p_w_picpath.bin:这是包含内核映像和 romfs文件系统映像,可以写到Flash中的文件,

linux.data:包括内核所有的数据段

linux.text:包括内核所有的代码段

romfs.img:文件系统

另外在uClinux-dist/linux-2.4.x目录里面生成了两个文件:linux和system.map

linux:linux内核文件

system.map:内核符号表

然后在uClinux-dist目录里面建一个skyeye.conf文件,并键入以下配置文件

代码:

#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

注意这个配置文件中需要boot.rom 文件系统,但是我们并没有生成boot.rom文件系统,怎么办?

ln -s p_w_picpaths/romfs.img boot.rom

代码:

wenwu@wenwu-desktop:/source/uClinux-dist$ ln -s p_w_picpaths/romfs.img boot.rom

这是就可以在uClinux-dist 目录里面看到boot.rom这个文件

下面就可以用skyeye运行我们自己编译出来的内核了。

代码:

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 p_w_picpaths:

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

For further information check:

http://www.uclinux.org/

Execution Finished, Exiting

Sash command shell (version 1.1.1)

/>

相信到这里整个uClinux 开发环境的拱建以及在skyeye上的运行方法都已经很清楚了。

Logo

一站式 AI 云服务平台

更多推荐