以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。
一、简单分析/etc/profile文件
1、何时被调用
这个文件直接或者间接地被/linuxrc文件调用。
2、文件简介
(1)busybox源码中的/examples/bootfloopy/etc/profile文件内容过于简单,不适合作为根文件系统的/etc/profile文件,所以从零开始构建根文件系统对其进行修改。
(2)简单修改后的/etc/profile文件内容如下。
# Ash profile # vim: syntax=sh# No core files by default ulimit -S -c 0 > /dev/null 2>&1USER="`id -un`" LOGNAME=$USER PS1='[\u@\h \W]\# ' PATH=$PATHHOSTNAME=`/bin/hostname`export USER LOGNAME PS1 PATH
(3)注意上面使用了bin/hostname这个命令,因此需要先将使用busybox生成的bin目录拷贝到根文件系统文件夹中。另外根据分析根文件系统中的etc/init.d/rcS文件,我们需要先创建主机名配置文件/etc/sysconfig/HOSTNAME,然后在里面输入主机名(比如“xjh”)。
二、添加用户登录功能(涉及/etc/intttab、/etc/passwd和/etc/shadow文件)
1、为何添加用户登录功能
在根文件系统添加上述的/etc/profile文件后,系统启动后命令行前面会显示“[@xjh ]#”,这表明profile文件已经起作用,因为hostname已经显示出来。但是“[xxx@xjh]#”中的“xxx”这个用户登录名没有显示,这是因为我们直接进入命令行而没有做登录。要显示登录用户名,需要添加用户登录功能。
2、如何添加用户登录功能
(1)在/etc/intttab文件中有一个配置项“::askfirst:-/bin/sh”,它表示系统启动后,如果按回车就执行/bin/sh,执行这个就会出现命令行,从而不会出现登录界面。要出现登录界面,系统启动后不能直接执行/bin/sh,而应该执行一个负责出现登录界面并且负责管理用户名和密码的一个程序。
(2)busybox集成了该程序,即/bin/login或者/sbin/gettty。只要在inittab文件中用/bin/login替代/bin/sh,则系统启动后出现登录界面。
::sysinit:/etc/init.d/rcS #::respawn:-/bin/sh #注释掉这个 ::respawn:-/bin/login #启用这个 #console::askfirst:-/bin/sh #tty2::askfirst:-/bin/sh ::ctrlaltdel:/bin/umount -a -r
3、为root用户设置密码
(1)上述步骤之后系统启动时可以输入用户名和密码,但是无论输入什么都提示错误,这是因为根本就没有为root用户设置密码造成的。因此我们需要为root用户设置密码。
(2)linux系统中用来描述用户名和密码的文件是passwd和shadow文件,passwd文件中存储的是用户的密码设置,shadow文件中存储的是加密后的密码。
(3)我们将ubuntu系统的/etc/passwd和/etc/shadow文件,复制到根文件系统的目录中,然后再做修改即可。假设只有root用户,则每个文件都只保留root的内容。详细修改步骤见博文从零开始构建根文件系统的第二节第3点的步骤3。
(4)注意,ubuntu刚装好时默认使用普通用户登录,无法用root用户登录,这是因为root用户在/etc/shadow文件中加密口令是空白的。普通用户的密码是在装系统时设置的,普通用户登陆后可以使用“su passwd root”给root用户设置密码,设置密码后,root用户才可以登录。但busybox中没有普通用户,因此如果root用户的加密口令是空的,则默认无密码直接登录。登陆了之后可以用“passwd root”给root用户设置密码。