本文是在学习朱有鹏老师嵌入式linux课程的过程中所整理的根文件系统构建步骤。X210
开发板嵌入式linux操作系统根文件系统的构建。0
准备工作: 0.1
开发板支持nfs作为根文件系统启动,并且已经能够启动内核。 0.2
搭建好要建立跟文件系统的nfs开发环境。 0.3
下载一个busybox,本次用的是busybox-1.24.1.tar.bz2.可以自己从网上下载。 0.4
本实验的本文件系统目录为: /root/porting_x210/rootfs/2rootfs 0.6
此时启动内核会有以下信息1.
修改Makefile1.1
复制busybox到根文件系统到 /root/porting_x210/rootfs目录中并解压1.2
修改Makefile中的ARCH(191行)和CROSS_COMPILE(根据自己的开发板以及交叉编译工具链的位置配置) (1) ARCH = arm
(2) CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin//arm-none-linux-gnueabi-
1.3 make menuconfig
进行配置如下Busybox Settings---> Build Options---> [*]Build BusyBox as a static binary(no shared libs) 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 Busybox Settings ---> Installation Options ("make install" behavior) ---> (./_install) BusyBox installation prefix
将路径导出到根文件系统目录及里面内容改为: /root/porting_x210/rootfs/2rootfs1.4 make
编译 出现如下错误: 解决办法:
修改 make menuconfig Coreutils ---> [ ] sync
重新make1.5 make install
安装 install
在所有的linux下的软件中作用都是安装软件。在传统的linux系统中安装软件时都是选择源代码方式安装的。我们下载要安装的软件源代码,然后配置、编译、安装。make install的目的就是将编译生成的可执行程序及其依赖的库文件、配置文件、头文件安装到当前系统中指定(一般都可以自己指定安装到哪个目录下,如果不指定一般都有个默认目录)的目录下1.6
进入rootfs目录下 ls查看当前文件夹内容如下: 再次重新启动内核,查看打印信息。 需要解决问题:rcS2
制作最小根文件系统1.1 Inittab
进入根文件系统目录:$mkdir etc
然后将inittab(文章中所用到的文件代码在文章末尾。因无法插入文件,自己复制代码创建即可,文件名字需相同)复制到etc目录下。重新启动内核结果如下: 1.2 rcS
文件 进入etc
目录 将fstab复制到etc目录下 $ mkdir init.d $ cd init.d
将rcS文件复制到init.d下 重新启动内核,问题没有解决。因为在windows
下创建文件,/r/n原因,格式不正确。在开发板中打开才能看出来 把M
删掉。再次重启,有以下问题: 在根文件系统目录下创建 proc sys var tmp dev
文件 $ mkdir proc sys dev var tmp
然后再次重启内核 根据提示目录创建次HOSTNAME
文件,在HOSTNAME中写入一个名字,保存退出后重新启动内核,警告消除!3. 用户登录 3.1
在命令行前显示用户名 将profile
文件复制到etc目录下,再次重启内核查看 3.2
显示用户登录界面 将inittab
中的::askfirst:~bin/sh 注释掉,前面加改为#::askfirst:~bin/sh (注释掉) 在下面添加一行::askfirst:~bin/sh
复制linux /etc
下的passwd和shadow到根文件系统的etc下。将除了root以外的删除。root:x:0:0:root:/root:/bin/bash
更改为oot:x:0:0:root:/root:/bin/sh再次运行即所复制linux
环境下的密码。 根文件系统构建中会用到的几个文件代码文件名rcS,代码如下:
#!/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.10
文件名 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
文件名 fastab
# /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).
#
#
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
文件名 profile
# Ash profile
# vim: syntax=sh
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
USER="`id -un`"
LOGNAME=$USER
PS1='[u@h W]# '
PATH=$PATH
HOSTNAME=`/bin/hostname`
export USER LOGNAME PS1 PATH
所构建的根文件系统可行后,可以再制作成镜像并烧录启动。