本文是在学习朱有鹏老师嵌入式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 promptsLinux Module Utilities--->[ ]Simplified modutils[*]insmod[*]rmmod[*]lsmod[*]modprobe[*]depmodLinux 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所构建的根文件系统可行后,可以再制作成镜像并烧录启动。