嵌入式Linux构建yaffs根文件系统

嵌入式Linux构建yaffs根文件系统

开发环境说明:


(一)编译busybox

解压并进入:

tar xvf busybox-1.13.0.tar.bz2
cd busybox-1.13.0

加载默认配置:

make defconfig

打开图形配置:

make menuconfig

使用静态编译并且指明交叉编译器:

 Busybox Settings  ---> 
		Build Options  ---> 
			[*] Build BusyBox as a static binary (no shared libs)  # 指明使用静态编译
			(arm-linux-) Cross Compiler prefix  # 指明交叉编译器
		Busybox Library Tuning  ---> 
			[*] Username completion  # 控制台显示完整用户名
			[*] Fancy shell prompts  # shell信息提示
Networking Utilities  --->
	[ ] ip tunnel  # 关闭ip隧道,要不然编译会出错

编译并安装:

make && make install

编译完成并安装后在当前目录下的_install文件夹。

(二)构建yaffs2文件系统

创建yaffs2文件系统目录:

mkdir yaffs2
cd yaffs2

创建文件系统所需的一级目录:

mkdir dev etc home lib mnt opt proc root sys tmp var usr

创建必要的二级目录:

mkdir usr/lib usr/share etc/rc.d var/lib var/lock var/run var/tmp

拷贝busybx相关文件:

cp -rf /opt/embeded/busybox-1.13.0/_install/* ./

拷贝库文件:

cp /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/usr/lib/*so* ./lib/ -a

拷贝主机etc目录下的必要文件:

cp /etc/passwd /etc/group /etc/shadow ./etc

拷贝busybox的示例配置文件:

cp /opt/embeded/busybox-1.13.0/examples/bootfloppy/etc/* ./etc/ -rf

在etc目录下创建用于支持热拔插设备的节点配置文件mdev.conf

touch etc/mdev.conf

创建两个设备节点文件。
①由于内核执行到mdev时还没有构建dev目录,如果没有创建/dev/console就会打印警告Warning: unable to open an initial console;②内核启动过程中会将一些垃圾信息丢弃,此时就需要/dev/null设备。

mknod dev/console c 5 1
mknod dev/null c 1 3

系统启动过程中的必要配置文件修改:
系统启动过程中bootloader会传递参数 init=/linuxrc给内核main函数,所以在文件系统挂载后第一个执行的程序是linuxrc,该文件是busybox的链接文件,也就说系统启动挂载文件系统后执行的第一个程序是busybox,busybox首先解析文件/etc/inittab,这个文件指明了接下来要启动哪些程序。

修改文件etc/initab:

该文件初始内容如下:

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

文件内容说明:inittab文件中每一个条目用来定义一个子进程,并确定他的启动方法。
第一条带有sysinit字段,表示系统启动后最先执行rcS文件并且只执行一次。
第二条带有respawn字段,表示直接运行-/bin/sh,无需输入用户名和密码
第三条带有askfirst字段,表示init进程先输出‘Please press Enter to actvie this console’,等待用户输入回车后在启动-/bin/sh,tty2是/dev目录下的串口设备文件,需要根据实际进行修改。
第四条表示按下快捷键ctrl+alt+delete时卸载所有设备

注意:第二条和第三条只能任选其一。

我们将该文件改为:

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
# ttySAC0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r

解析完毕inittcb文件后,接下来就是运行/etc/init.d/rcS这个脚本文件了,修改该文件如下:

#!/bin/sh

# shell命令的搜索路径
PATH=/sbin:/bin:/usr/sbin:/usr/bin

# 运行等级是单用户模式
runlevel=S

# 前一个等级为N表示没有前一个级别
prevlevel=N

# 权限位掩码
umask 022

# 将以上设置导出到环境中
export PATH runlevel prevlevel

# 指明了在shell中的提示符:[root@tq2440/]#
/bin/hostname tq2440

# 将文件/etc/fstab中指明的文件系统挂载到对应挂载点上
mount -a

# 如果目录pts不存在则创建
mkdir -p /dev/pts

# 从内存挂载一个虚拟的文件系统,作用是可以了解目前远程虚拟终端(telnet,ssh等)的基本情况
mount -t devpts devpts /dev/pts

# 使用mdev处理内核的热拔插事件
echo /sbin/mdev > /proc/sys/kernel/hotplug

# 建立dev目录,扫描/sys/class和/sys/block下所有块设备目录,如果在扫描到设备文件含有dev且文件中包含的时设备号,利用这些信息在/dev目录下创建设备节点文件
mdev -s

# 更新环境变量
source /etc/profile

修改/etc/mdev.conf文件内容如下:

sd[a-z]*[0-9]		0:0	0660	@(mount -t vfat -o iocharset=cp936 /dev/$MDEV /mnt/udisk)
sd[a-z]*[0-9]		0:0	0660	*(umount /mnt/udisk)
mmcblk[0-9]*p[0-9]	0:0	0660	@(mount -t vfat -o iocharset=cp936 /dev/$MDEV /mnt/sd)
mmcblk[0-9]*p[0-9]	0:0	0660	*(umount /mnt/sd)

修改/etc/fstab文件内容如下:

#device		mount-point	type	options		dump	fsck order
proc		/proc		proc	defaults		0	0
none        /tmp        ramfs   defaults        0   0
sysfs		/sys		sysfs	defaults		0	0
mdev		/dev		ramfs	defaults		0	0

修改/etc/profle文件内容如下:

# /etc/profile: system-wide .profile file for the Bourne shells

echo
echo -n "Processing /etc/profile... "

# 这条命令的意思是设置core文件大小为0,输出信息以及错误信息都不输出在显示器上。
#ulimit -S -c 0 > /dev/null 2>&1

# 获取用户名
USER="`id -un`"

# 登陆显示名
LOGNAME=$USER

# 在shell下的显示格式[root@tq2440 /]# 
PS1="\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\\$ "

# 加载环境变量
PATH=$PATH

# 主机名
HOSTNAME=`/bin/hostname`

# 导出到环境变量
export USER LOGNAME PS1 PATH

echo "Done"
echo

在用户登陆时系统会在/etc下寻找三个文件:passwd、shadow、group用来匹配相关信息。

修改/etc/passwd,只保留root、daemon和bin这三行:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

修改/etc/shadow,只保留root、daemon和bin这三行:

root:$6$EfJ5aZ0U$7GfeBkv0vfZj2pIQhoxc1HEpObTI2IA0jo57DJLIQkCNMkIsxbCKSXlr5Utnyp58uN70i.dN41J7kQb/fXsck/:17850:0:99999:7:::
daemon:*:16273:0:99999:7:::
bin:*:16273:0:99999:7:::

修改/etc/group,只保留root、daemon和bin这三行:

root:x:0:
daemon:x:1:
bin:x:2:

到此根文件系统yaffs2制作完毕!

使用如下命令创建文件系统镜像:

mkyaffs2image yaffs2 yaffs2.bin

然后下载到NAND存放文件系统所在的分区就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

觉皇嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值