6.1创建/etc/initab文件
Linux内核自举启动完成之后,最后将创建init进程并执行根文件系统中的/init或/initrc程序,该程序解析并执行/etc/inttab配置文件,在此文件中配置了init进程在系统启动要启动哪些应用程序。
[guozhihao@localhost rootfs]$ cd ~/gitee/fl2440/linux/rootfs/
[guozhihao@localhost rootfs]$ vim etc/inittab
6.2创建/etc/fstab文件
Linux下的mount -a命令将自动挂载/etc/fstab文件中指定的所有需要系统自动挂载的文件。在/etc/inittab中使用该命令在上电时自动挂载相应的文件系统,这里面主要是挂在一些伪文件系统,这些伪文件系统主要是导出Linux内核运行的相关信息,如比较重要的tmpfs、sysfs、proc文件系统等。
[guozhihao@localhost rootfs]$ cd ~/gitee/fl2440/linux/rootfs
[guozhihao@localhost rootfs]$ vim etc/fstab
6.3创建hostname文件
/etc/hostname文件指定主机名,/etc/initab文件中通过hostaname -F /etc/hostname 命令设置主机名
[guozhihao@localhost etc]$ cd ~/gitee/fl2440/linux/rootfs/
[guozhihao@localhost rootfs]$ vim etc/hostname
6.4创建系统启动脚本
系统所有的启动脚本我们都将放在/etc/init.d路径下,接下来我们将创建这些系统启动脚本:
[guozhihao@localhost rootfs]$ cd ~/gitee/fl2440/linux/rootfs/
[guozhihao@localhost rootfs]$ ls etc/
fstab hostname init.d inittab
[guozhihao@localhost rootfs]$ cd etc/init
init.d/ inittab
[guozhihao@localhost rootfs]$ cd etc/init.d/
[guozhihao@localhost init.d]$ ls
启动脚本一、/etc/init.d/rcS
/etc/inittab脚本会使用命令/etc/init.d/rcS启动所有其他的应用程序,下面创建etc/rcS脚本,该脚本执行/etc/init.d/下所有文件名以S开头且后面紧跟至少包括2个字符的文件。
[guozhihao@localhost init.d]$ vim rcS
[guozhihao@localhost init.d]$ ls
rcS
[guozhihao@localhost init.d]$ chmod a+x rcS
[guozhihao@localhost init.d]$ ls
rcS
启动脚本二、/etc/init.d/S10_network
假设我们希望系统自动设置网卡的IP地址,则可以创建一个文件名以S开头且后面紧跟至少包括2个字符的启动脚本,并给执行权限。
[guozhihao@localhost init.d]$ vim S10_network
[guozhihao@localhost init.d]$ chmod a+x S10_network
启动脚本三、/etc/init.d/S99_rcsApp
今后我们很多应用程序将会存放在/apps分区下,有时我们希望这些应用程序的启动脚本也存放在该分区下以便管理。这时我们可以参考rcS脚本的实现机制,让它也执行在/app/etc下的所有启动脚本。
[guozhihao@localhost init.d]$ vim S99_rcsApp
[guozhihao@localhost init.d]$ chmod a+x S99_rcsApp
[guozhihao@localhost init.d]$ ls
rcS S10_network S99_rcsApp
6.5创建shell的配置
在Linux服务器上,我们可以通过修改~/.bash_profile或~/.bashrc文件修改Shell的配置文件,如修改PATH、LD_LIBRARY_PATH环境变量等,也可以在里面定义命令别名。在嵌入式环境下,我们这些Shell的配置保存在/etc/profile文件中。这时我们可以创建该文件配置嵌入式环境busybox里的shell(ash)。
切换到根文件系统树/etc路径下:cd ~/gitee/fl2440/linux/rootfs/etc/
[guozhihao@localhost etc]$ vim profile
6.6创建Linux登陆账号文件
Linux系统中的登陆账号信息保存在/etc/group、/etc/passwd和/etc/shadow文件中。
(1)/etc/group文件保存了用户组信息;
(2)/etc/passwd文件保存了用户信息;
(3)/etc/shadow文件保存来相应用户的密码;
下面我们需要在根文件系统中创建这些系统账号文件,在这里我们创建root账号,其他账号的过程类似。当然也可以在系统启动后以root账号权限来添加。
[guozhihao@localhost etc]$ cd ~/gitee/fl2440/linux/rootfs/etc/
[guozhihao@localhost etc]$ ls
fstab hostname init.d inittab profile
一./etc/group文件
[guozhihao@localhost etc]$ vim group
该文件的格式为:
groupname:password:gid:members
第一个字段为用户组名称;
第二个字段为用户组密码,当为x时密码是映射到/etc/gshadow中的,是非逆的;
第三个字段为GID,及组号,为正整数或0,0被付于了root用户组;系统通常会预留一些较靠前的GID给系统虚拟用户之用,每个系统预留的GID都不同,一般普通用户的GID从500开始;
第四个字段为用户列表,每个用户间用逗号分隔;
二./etc/passwd文件
[guozhihao@localhost etc]$ vim passwd
该文件的格式为:
username:password:uid:gid:fullname:homedir:shell
(1)第一个字段为用户组名称;
(2)第二个字段为用户组密码,当为x时密码是映射到/etc/shadow中;
(3)第三个字段为ID(UID);
(4)第四个字段为用户所属组ID(GID);
(5)第五个字段为用户全称
(6)第六个字段为用户根目录
(7)第七个字段为用户所用shell的类型
例如自己虚拟机的/etc/passwd里的信息
注:
Unix系统最初是用明文保存密码的,后来由于安全的考虑,采用crypt()算法加密密码并存放在/etc/passwd文件。现在,由于计算机处理能力的提高,使密码破解变得越来越容易。/etc/passwd文件是所有合法用户都可访问的,大家都可互相看到密码的加密字符串,这给系统带来很大的安全威胁。现代的Unix系统使用影子密码系统,它把密码从/etc/passwd文件中分离出来,真正的密码保存在/etc/shadow文件中,shadow文件只能由超级用户访问。这样
入侵者就不能获得加密密码串,用于破解。使用shadow密码文件后,/etc/passwd文件中所有帐户的password域的内容为"x",如果password域的内容为"*",则该帐号被停用。
三./etc/shadow文件
/etc/shadow文件保存了相应帐号的密文,这个文件内容不能直接创建。如果我们想在嵌入式Linux系统中设置root的登录密码为123456,则我们先在自己的Linux服务器或虚拟机上修改root密码为123456,然后再将Linux服务器或虚拟机上的/etc/shadow文件里root帐号的密码密文部分拷贝出来,创建根文件系统树里的etc/shadow时将密文部分用这个密文替换。这个过程做完后记得将自己的Linux服务器或虚拟机的root密码还原回去。
[guozhihao@localhost etc]$ sudo passwd root
Changing password for user root.
New password:
Retype new password:
Sorry, passwords do not match.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
[guozhihao@localhost etc]$ sudo cat /etc/shadow | grep root
root:$1$ZV3zNSrr$lLwtFPKck44VdQsEyjBLe/:17621:0:99999:7:::
现在我们创建根文件系统树下的/etc/shadow文件,参考下文内容将上面root账号的加密密文部分($1$ZV3zNSrr$lLwtFPKck44VdQsEyjBLe/)拷贝过来,其他部分保持不变:
[guozhihao@localhost etc]$ sudo vim shadow
该文件的格式为:
usrname:password:lastchange:min_change:max_change:warm:failed_expire:expiration:reserved
(1)第一字段:用户(也被称为登录名),在/etc/shadow中,用户名和/etc/passwd是相同的,这样就把passwd和shadow中用的用户记录联系在一起;这个字段是非空的;
(2)第二字段:密码加密后的密文,这个字段是非空的;
(3)第三字段:上次修改密码的时间;这个时间是从1970年01月01日算起到最近一次修改口令的时间间隔(天数);
(4)第四字段:两次修改密码间隔最少的天数;如果这个字段的值为空,账号永久可用;
(5)第五字段:两次修改密码间隔最多的天数;如果这个字段的值为空,账号永久可用;
(6)第六字段:两次修改密码间隔最多的天数;如果这个字段的值为空,账号永久可用;
(7)第七字段:在密码过期之后多少禁用此用户;如果这个字段的值为空,账号永久有效;
(8)第八字段:用户过期日期;此字段指定了用户作废的天数,如果这个字段的值为空,账号永久有效;
(9)第九字段:保留字段,目前为空,以备将来发展之用;
6.7创建Linux其他文件
切换到根文件系统树etc路径下:
[guozhihao@localhost rootfs]$ cd ~/gitee/fl2440/linux/rootfs/etc/
[guozhihao@localhost etc]$ ls
fstab group hostname init.d inittab passwd profile shadow
一./etc/resolv.conf文件
该文件用来设置Linux系统DNS服务器,DNS服务器用来将域名转换成IP地址。
[guozhihao@localhost etc]$ vim resolv.conf
二./etc/hosts文件
/etc/hosts文件存放本机静态绑定的域名,如下面在本机上域名localhost就会被解析成127.0.0.1,不需要DNS来做解析。
三./etc/TZ文件
/etc/TZ文件配置了系统的时区
[guozhihao@localhost etc]$ vim TZ
四./etc/issue文件
/etc/issue文件里存放在console上登陆系统时提示警告信息
[guozhihao@localhost etc]$ vim issue
至此Linux根文件系统树所需要的基本文件都已经有了,接下来我们可以使用Linux内核启动这个根文件系统。