在上一次成功移植内核通过tftp方式下载内核并且通过nfs方式挂载根文件系统后,基本就可以看到在系统启动后有控制台输出,但是会一直报错,原因就是根文件系统缺少部分文件,在系统启动挂载根文件系统时需要运行相关文件,比如rcS,inittab,profile等文件,导致控制台会一直输出相关错误信息。
接下来就是对系统进行相关的配置
需要配置的文件有
第一步就是在根文件目录下的etc/下添加inittab文件
#first:run the system script file 运行系统时先运行的脚本
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:-/sbin/reboot
#umount all filesystem
::shutdown:/bin/umount -a -r
#restart init process
::restart:/sbin/init
这里提一下这个文件下文本的命令格式为id:runlevel:action:process
id:字段:action:process
再重新启动系统就可以看到提示,进入控制台也没有相关的报错信息输出,应该说在进入控制台后
首先通过分析可知,在初始化时执行 /etc/init.d/rcS ,可以看到这里的rcS就是一个初始化脚本,导出环境变量,设置runlevel即运行模式为S(单用户模式)和prevlevel
umask是设置创建目录时默认的权限,这里为022,在Linux下可以通过命令umask查出其默认创建目录的权限
接下来就是导出runlevel和prevlevel
mount -a 用来挂载文件系统的,mount -a的意思是挂载所有的应该挂载的文件系统,在busybox中mount -a时会去查找一个文件/etc/fstab、并执行这个文件
默认没有这个sysconfig目录和HOSTNAME文件,需要创建
/bin/hostname -F /etc/sysconfig/HOSTNAME下的HOSTNAME存放的就是主机名,启动后用来设置系统主机名的
ifconfig eth0 192.168.1.20设置网络ip,建议和uboot设置的一致,不然通过nfs挂载会断开重连需要时间,也很麻烦
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
mount -a
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
/bin/hostname -F /etc/sysconfig/HOSTNAME
ifconfig eth0 192.168.1.20
下一个文件fstab
# /etc/fstab: static file system information.
#
# Use 'vol_id --uuid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /var tmpfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
和挂载相关的
启动后登陆login设置
还有后面需要设置启动登陆后再进入控制台的,第一需要在inittab文件下的#::askfirst:-/bin/sh替换成::askfirst:-/bin/login
#first:run the system script file
::sysinit:/etc/init.d/rcS
#::askfirst:-/bin/sh
::askfirst:-/bin/login
::ctrlaltdel:-/sbin/reboot
#umount all filesystem
::shutdown:/bin/umount -a -r
#restart init process
::restart:/sbin/init
除此之外还需要在Ubuntu下的etc/下拷贝passwd和shadow两个文件到所挂载的根文件系统下的etc/目录下,对其进行一定的修改
passwd文件
shadow文件
这里的是含有密码的,而且这个密码进行的加密,这里的这个文件下只看到了这个XEkxNPCSDuKwQ是其加密后的密文,对于我们刚移植可以不需要这个,先将其删除后发现登陆只需要输入用户名而不需要密码,回车即可进入控制台,可以通过passwd root的方式进行设置密码。
配置完成功启动后挂载根文件系统的效果
多提一嘴:有可能会发现系统启动后控制台输出没有init.d/rcS这个文件,可能是在在windows下编辑的这个文件,需要在串口输出的控制台下打开这个文件删除每一行后面的^M字符,太多坑了。。。