微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 构建 arm-linux 仿真运行环境 (skyeye + arm-linux + NFS)

构建 arm-linux 仿真运行环境 (skyeye + arm-linux + NFS)

时间:11-10 来源:互联网 点击:

home var tmp

#chmod 777 tmp

建立设备文件

#cd dev

#mknod -m 644 console c 5 1

#mknod -m 644 null c 1 3

#mknod -m 640 ram b 1 1

#mknod -m 644 mem c 1 1

#cd ..

创建脚本文件 etc/inittab, 内容如下:

::sysinit:/etc/init.d/rcS

::askfirst:-/bin/sh

::restart:/sbin/init

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r

::shutdown:/sbin/swapoff -a

设置此脚本执行权限

#chmod 644 etc/inittab

创建脚本文件 etc/init.d/rcS, 内容如下:

#!/bin/sh

/bin/mount -t proc none /proc

/sbin/ifconfig lo 127.0.0.1 up

/sbin/ifconfig eth0 10.0.0.2 netmask 255.0.0.0 up

hostname skyeye

mkdir /var/tmp

mkdir /var/log

mkdir /var/run

mkdir /var/lock

/bin/ash

设置此脚本执行权限

#chmod 755 etc/init.d/rcS

最后一步,执行实际的写入操作,生成 initrd.img

cd ..

umount initrd

五 运行 arm-linux

现在我们有了内核 vmlinux, 映像文件 initrd.img, 模拟程序 skyeye, 我们还需要一个

配置文件 skyeye.conf 进行 arm-linux 的仿真运行。

#mkdir /root/test

#cd /root/test

将 vmlinux, initrd.img 都拷贝到此目录, 在此目录下建立一个 skyeye 的配制文件

skyeye.conf, 文件内容如下:

cpu: arm920t

mach: s3c2410x

# physical memory

mem_bank: map=M, type=RW, addr=0xc0000000, size=0x00800000

mem_bank: map=M, type=RW, addr=0xc0800000, size=0x00800000, file=./initrd.img

mem_bank: map=M, type=RW, addr=0xc1000000, size=0x01000000

# all peripherals I/O mapping area

mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000

mem_bank: map=I, type=RW, addr=0x19000300, size=0x00000020

net: type=cs8900a, base=0x19000300, size=0x20,int=9, mac=0:4:3:2:1:f, ethmod=tuntap, hostip=10.0.0.1

lcd: type=s3c2410x, mod=gtk

#dbct:state=on

好了,试运行吧:

skyeye -e vmlinux

看到你的 arm-linux 运行了吗 :-)

六 在 arm-linux 里运行我们自己的程序

现在 arm-linux 在 skyeye 上跑起来了, 我们能运行里面的命令, 但这些都是 busybox

的,是系统程序。怎样才能在 arm-linux 里运行我们自己的程序呢? 有两种方案,我们不妨讨论一

下,择优而录之:

1.在制作根文件系统 initrd.img 的时候把我们自己的程序加进去,比如放在 /usr/bin 里

目录下,然后重新生成 initrd.img,并用这个新的根文件系统来运行 arm-linux。其实这

是我们的产品在 arm-linux 上发布的最终方式,但这有个缺点: 在产品开发/调试阶段这么

做比较麻烦,每修改一次代码就得 build 一次根文件系统。

2.利用挂接 NFS(Network file system) 的方式,我们访问/执行一个网络文件系统上的文件

就像它在本地一样,显然这么做能避免第一种方案的弊端! 如何实现呢? 随我来:

(1)在 arm-linux 的宿主机里配置 NFS Server (我用是 ubuntu,而且是在 vmware 里)

#apt-get install nfs-kernel-server

#apt-get install nfs-common

(2)编辑文件 /etc/exports, 内容如下(具体需求由你而定):

/test *(rw,sync,no_root_squash)

/usr/local/arm/3.3.2/lib *(ro,sync,no_root_squash)

(3)配置宿主机的 ip

#ifconfig eth1 down

#ifconfig eth1 10.0.0.1 netmask 255.0.0.0 up

注:你的可能是 eth0, 另外 ip 地址你也可自己定义,只要能和 arm-liux 通信

(4)重启 nfs server

#/usr/sbin/exportfs -r

#/etc/init.d/nfs-kernel-server restart

#/etc/init.d/portmap restart

注:可用 showmount -e 来验证你的配置是否成功

(5)在 skyeye 运行 arm-linux,为其配置 ip

#ifconfig lo down

#ifconfig eth0 down

#ifconfig lo 127.0.0.1 up

#ifconfig eth0 10.0.0.2 netmask 255.0.0.0 up

注:可将这几个命令加到 rcS 脚本里,让 arm-linux 启动时帮你做

(6)在 skyeye 上运行 arm-linux,演示 nfs 挂接

#mount -o nolock 10.0.0.1:/usr/local/arm/3.3.2/lib /lib

#export LD_LIBRARY_PATH=/lib

#mount -o nolock 10.0.0.1:/test /tmp

在宿主机的 /test 下建立文件 hello.c,用 arm-linux-gcc 3.3.2 编译

#cd /test

#arm-linux-gcc -o hello hello.c

在 arm-linux 的 /tmp 下看看,是不是有 hello.c 和 hello 这两个文件了? 试着运行看看:

#cd /tmp

#./hello

注:为了确认 arm-linux 能和宿主机通信, 可尝试以下手段:

(1)在宿主机上 ping 你的 arm-linux

#ping 10.0.0.2 -c 2

(2)在 arm-linux 里 ping 你的宿主机

#ping 10.0.0.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top