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

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

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

支持

File systems ---> Network File Systems --->

至少确保下面两项被选中:

[*] NFS file system support

[*] Provide NFSv3 client support

(6)设置 ROM file system 的支持

File systems ---> [*] ROM file system support

确保 [*] ROM file system support 被选中

(7)设置 ext2 的支持

File systems ---> [*] Second extended fs support

确保 [*] Second extended fs support 被选中

7.编译

#make

编译完成后会有个 vmlinux 在当前目录下, 这就是我们要的 arm-linux 内核了

四 制作根文件系统 initrd.img(Initial RAM disk)

我们选定 busybox-1.9.2.tar.bz2 这个版本, 以静态方式编译, 即生成的 busybox 不需

要共享库的支持就能运行。这样做我们就不需要布署程序库了。缺点是自己写的 arm-linux 程序在

这个根文件系统中是不能运行的,因为缺少共享程序库的支持。不过别担心,我们会解决这个问题的,稍

后你将看到,通过在 arm-linux 里以挂接 NFS 的方式, 将宿主机的 arm-linux-gcc 编译器的

库文件挂到 arm-linux 的 /lib 下, 就可完美的运行我们自己的程序了。好,一步步来,先来看看

根文件系统的制作:

1.解压源码包

#tar xjf busybox-1.9.2.tar.bz2

#cd busybox-1.9.2

2.修改 Makefile, 将

ARCH ?= $(SUBARCH)

CROSS_COMPILE ?=

改为

ARCH ?= arm

CROSS_COMPILE ?= /usr/local/arm/3.3.2/bin/arm-linux-

注:这个版本的 busybox 用 3.4.1 的 arm-linux-gcc 编译有些问题, 用 3.3.2 版则可顺利编译。

3.定制 busybox

#make menuconfig

设置静态编译方式

Busybox Settings ---> Build Options ---> [*] Build BusyBox as a static binary (no shared libs)

确保 [*] Build BusyBox as a static binary (no shared libs) 被选中

4.执行 make 编译

#make

编译出错, 信息如下:

applets/applets.c:15:2: warning: #warning Static linking against glibc produces buggy executables

applets/applets.c:16:2: warning: #warning (glibc does not cope well with ld --gc-sections).

applets/applets.c:17:2: warning: #warning See sources.redhat.com/bugzilla/show_bug.cgi?id=3400

applets/applets.c:18:2: warning: #warning Note that glibc is unsuitable for static linking anyway.

applets/applets.c:19:2: warning: #warning If you still want to do it, remove -Wl,--gc-sections

applets/applets.c:20:2: warning: #warning from scripts/trylink and remove this warning.

applets/applets.c:21:2: error: #error Aborting compilation.

make[1]: *** [applets/applets.o] Error 1

按照提示,修改 scripts/trylink, 将此文件里面有 -Wl,--gc-sections 的行都删除掉,

然后重新 make

#make

还是出错, 信息如下:

root@hukq-desktop:~/busybox/busybox-1.9.2# make

CC applets/applets.o

applets/applets.c:15:2: warning: #warning Static linking against glibc produces buggy executables

applets/applets.c:16:2: warning: #warning (glibc does not cope well with ld --gc-sections).

applets/applets.c:17:2: warning: #warning See sources.redhat.com/bugzilla/show_bug.cgi?id=3400

applets/applets.c:18:2: warning: #warning Note that glibc is unsuitable for static linking anyway.

applets/applets.c:19:2: warning: #warning If you still want to do it, remove -Wl,--gc-sections

applets/applets.c:20:2: warning: #warning from scripts/trylink and remove this warning.

applets/applets.c:21:2: error: #error Aborting compilation.

make[1]: *** [applets/applets.o] Error 1

make: *** [applets] Error 2

修改文件 applets/applets.c 第 21 行, 将

#error Aborting compilation.

注释掉:

/*#error Aborting compilation.*/

执行 make 重新编译

#make

编译通过, busybox 被生成了, 然后执行

#make install

busybox 就被安装到默认的临时目录 _install 下了

5.制作 initrd.img

有了 busybox 后制作 initrd.img 就容易多了,只是说起来比较烦琐。以命令演示如下:

创建映像文件并挂到 initrd 目录

#mkdir initrd

#dd if=/dev/zero of=initrd.img bs=1k count=4096

#mke2fs -F -v initrd.img

#mount -o loop initrd.img initrd

将添加 busybox 到此映像文件

#cd initrd

#cp -r ../_install/* .

#创建必要的目录

#mkdir proc lib etc dev root

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

网站地图

Top