课堂实践:
1)根据前面的步骤制作根文件系统,采用默认的配置。
2)使用第7章制作的u-boot;使用mkimage处理过的内核映象,通过NFS方式启动Linux内核(具体步骤参考第7章的内容)。
3)根文件系统的配置文件,使用busybox提供的配置文件例子(busybox-1.13.4/examples/bootfloppy/etc) 。
4)进行连接:
修改开发板上u-boot的环境变量bootargs为:
setenv bootargs'noinitrd root=/dev/nfsrwnfsroot=192.168.1.5:/nfs/micro2440/rootfsip=192.168.1.20:192.168.1.1::255.255.255.0console=ttySAC0,115200init=/linuxrcmem=64M'
其中192.168.1.5为nfs服务器IP地址
5) 启动:通过u-boot启动Linux内核(boot命令)。
---------------------------------------------------------------------------------------------------------
先确保根nfs文件系统的目录在linux环境下能正常挂载。
1、
设置交叉编译工具路径
make menuconfig
建议修改install的安装路径,到xxx/rootfs
make编译根文件系统
2、创建根文件系统的目录
mkdir home proc dev lib mnt etc sys var root tmp
mkdir -p usr/lib
3、将busybox-1.13.4/examples/bootfloppy/etc/内的所有子目录和文件复制到rootfs/etc/下面。
4、安装库文件,将/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/下面所有的文件(包括链接),复制到rootfs/lib/目录下(光用arm-linux-readelf找出来的库文件不够)。
如果没有库文件或者库文件不足,启动之后会出现“Kernel panic: No init found. Try passing init= option to kernel”
如果库文件不匹配,启动之后会出现“Kernel panic - not syncing: Attempted to kill init”
5、在rootfs/dev/目录下创建设备文件,
mknod -m 660 null c 1 3
mknod -m 660 console c 5 1
如果不做这一步,启动之后可能会出现“Warning: unable to open an initial console”
注意:还要添加
mknod -m 660 tty2 c 1 3
mknod -m 660 tty3 c 1 3
mknod -m 660 tty4 c 1 3
因为在init/init.c文件中如下3句
694 new_init_action(ASKFIRST,bb_default_login_shell,VC_2);
695 new_init_action(ASKFIRST,bb_default_login_shell,VC_3);
696 new_init_action(ASKFIRST,bb_default_login_shell,VC_4);
这三句会启动三个虚拟终端,要么注释掉这三句,重新编译,制作文件系统;或者像上面创建tty2、tty3、tty4的设备文件。本次实践采用创建设备文件的方式。如果不做处理,启动之后会循环出现:“can't open /dev/tty3: No such file or directory”等信息。
6、在u-boot命令行下,修改开发板上u-boot的环境变量bootargs为:
setenv bootargs 'noinitrd root=/dev/nfs rw nfsroot=192.168.1.5:/nfs/micro2440/rootfs ip=192.168.1.5:192.168.1.1::255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M'
ip的第一项是目标板的临时IP(不要与局域网内其它IP冲突),
第二项是网关的IP(实际应用中发现好象没什么用)
第三项是子网掩码
第四项是掩码,
设置好后,输入boot即可启动