零、在windows底下下载 busybox,并将其弄到WinShare目录下,再通过windshare将其复制到Ubuntu目录下,/root/porting_x210/rootfs/aston_rootfs,解压,打开。
1、 Makefile 修改
(1) ARCH = arm
(2) CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
一、打开busybox-1.24.1,在顶层文件下make menuconfig,做如下配置
1、make menuconfig配置
Busybox Settings--->
Build Options--->
[*]Build BusyBox as a static binary(no shared libs)
Busybox settings--->
Busybox Library Tuning--->
[*]vi-style line editing commands
[*]Fancy shell prompts
Linux Module Utilities--->
[ ]Simplified modutils
[*]insmod
[*]rmmod
[*]lsmod
[*]modprobe
[*]depmod
Linux System Utilities--->
[*]mdev
[*]Support /etc/mdev.conf
[*]Support subdirs/symlinks
[*]Support regular expressions substitutions when renaming dev
[*]Support command execution at device addition/removal
[*]Support loading of firmwares
配置完成之后保存退出。
2、直接make编译, 编译之后出错
编译出错,提示 sync.c 文件中有个变量没有定义,那个怎么解决呢?这里的解决方法是跳过sync.c 文件,不编译、不链接。
(1)、 首先找到 sync.c 文件,执行命令【find –name “sync.c”】,可以看到 sync.c 文件在
【./coreutils/sync.c】
(2)、在当前路径下打开 coreutils,然后 ls,查看当前目录中确实有 sync.c 文件,但是这个目录中没有 Makefile 文件,这里用 Kbuild 文件替代了 Makefile,找到 sync.o 文件。
(3)、到顶层目录,执行【make menuconfig】,用【/ 】查找 sync 的配置路径,可以看到 sync
在 coreutils 下。将 sync 配置为【n】
(4)、重新 make 编译,在顶层目录下 ls,可以看到 busybox 则证明编译通过。
二、编译通过之后,安装
1、执行【make install】去安装 busybox
默认的安装路径是顶层目录下,新建一个_install 的目录去安装
在 make menuconfig 窗口中查看,
Busybox Settings
Installation Options(“make install” behavior)
(./_install)Busybox installation prefix
2、修改安装路径
Busybox Settings
Installation Options(“make install” behavior)
(./_install)Busybox installation prefix
在弹出的窗口将默认的路径删除,添加我自己想要安装的根文件的路径。这里输入路径为:/root/porting_x210/rootfs/rootfs
然后make install,到/root/porting_x210/rootfs/rootfs下查看
三、检验我们创建的linuxrc是否可以用
1、设置bootargs挂载添加busybox移植的rootfs
注意uboot的bootargs设置成:
setenv bootargs root=/dev/nfs nfsroot=192.168.1.141:/root/porting_x210/rootfs/rootfs ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200
2、实验结果:挂载成功,执行/linuxrc(也就是busybox)成功,但是因为找不到/etc/init.d/rcS和/dev/tty2等文件所以一直在打印错误提示信息,但是其实有进入命令行。
3、实际效果是这样的
要注意的细节:
(1)nfs要配置正确,包括导出的路径,以及所导出路径的文件夹的权限(777)
(2)网卡的设置,要能ping 通开发板
四、创建配置文件inittab文件(对应课程2.19.3)
1、进入/root/porting_x210/rootfs/rootfs,执行【mkdir etc】,进入etc目录,将inittab文件拷贝到etc目录下。
2、打开开发板,不按回车,让开发板自己启动。(bootcmd,bootargs参数都不要修改),可以看到效果是这样的。
3、此时按ENTER进入控制台,发现所有的Linux命令(ls pwd touch)都可以运行了。
此时在SecureCRT中执行【touch a.c】,再到Linux中去看,发现有一个a.c文件,为什么会这样呢?
因为开发板是远程挂载Linux的根文件系统,所以在SecureCRT中操作,就相当于在Linux中操作。
这里所有的下载都是,开发板中只有uboot,然后通过tftp命令去Ubuntu中/tftp目录下下载zImage文件,然后通过nfs命令去加载/root/porting_x210/rootfs/rootfs目录中的根文件系统。bootcmd与bootargs的参数设置如下:
bootargs=root=/dev/nfs nfsroot=192.168.1.141:/root/porting_x210/rootfs/rootfs ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200
bootcmd=tftp 0x30008000 zImage; bootm 0x30008000
到第五步之后,由于每次都通过网线去远程下载zImage,太麻烦了,所以将zImage直接通过fastboot拷贝到开发板中。
此时bootargs不用改,但是bootcmd参数要改,bootcmd参数如下:
bootcmd=movi read kernel 30008000; movi read rootfs 30B00000 300000; bootm 30008000 30B00000
五、在busybox中添加rcS文件(上一步报错就是找不到rcS文件)
1、进入/root/porting_x210/rootfs/rootfs/etc,执行【mkdir init.d】,将朱老师的rcS文件拷贝到这个目录下。
此时再去开机,看到的效果是这样的。
但是事实上我们刚才已经将rcS文件拷贝到init.d文件夹中了。在SecureCRT中打开rcS文件可以看到,rcS文件的末尾每一行都多了一个^M符号,这是由于windows下的换行符与Linux中的换行符不一样造成的。将行末的^M符号删掉即可。
2、再次开机,可以看到截图的情形。
复制fstab文件到etc目录下,再次开机,可以看到
什么原因?
因为根文件系统中找不到挂载点,所以挂载出错。
3、解决挂载错误的方法
打开fstab文件,可以看到
解决方案就是自己在制作的/root/porting_x210/rootfs/rootfs/根目录下创建这些挂载点【就是fstab文件中的mount point】目录即可。创建fstab中要挂载的目录,执行【mkdir proc sys tmp var dev】