linux开发笔记--busybox根文件系统制作
linux开发笔记--busybox根文件系统制作一、什么根文件系统
文件系统:ntfs ext1\2\3\4 yaffs(nandflash) jffs2(norflash)
nfs:网络文件
cramfs //只读的文件系统
搭建一个系统
有三部分:
bootloader ---u-boot
系统镜像 ---uImage
文件系统 ---制作根文件系统
系统镜像如何找到文件系统
1、本地挂载 :一般用于真正的产品
硬盘启动
U盘启动
DVD驱动
---------------------------------
对于A9会从emmc或者sd卡挂载本地系统
2、网络挂载 : 主要用于调试,调试驱动
nfs文件系统挂载
二、编译、挂载根文件系统(busybox软件包)
专用:MP3 --- 为播放音乐 启动Linux系统后自动开启播放器
根文件系统:
1、配置文件
2、应用程序(ls cp tar pwd .....)
------------------
3、驱动:设备节点
4、库
--------------------------------------------------
http://www.busybox.net/: 可以从此处下载busybox软件包
--------------------------------------------------
2.1、配置
1、修改Makefile -- 修改交叉编译器:arm-linux-
2、使用make menuconfig配置
Busybox Settings--->
Build Options--->
//使不使用静态编译:一般不使用静态编译
[ ] Build BusyBox as a static binary (no shared libs) (NEW)
(arm-linux-) Cross Compiler prefix//配置交叉编译器
Installation Options ("make install" behavior)--->
Busybox Library Tuning
[*] Tab completion (NEW)//tab功能补全
编译应用程序:有两种方式
1、静态:链接 - 把相关库全部链接进应用程序
优点:应用程序放到哪里都可以执行
缺点: 空间比较大
2、动态:链接 -- 把相关库保留链接符号
优点:编译出来应用程序比较小
缺点:需要相应库
gedit :g桌面 -- 编辑器
kwrite: x桌面 -- 编辑器
bin :存放常用的linux命令
linuxrc : 链接文件:他是init进程 1号进程 ---Linux启动后第一执行应用程序
sbin : 存放系统命令
usr : 存放用户的命令
lib : 库
etc : 配置文件
dev : 设备文件
打开/dev/console作为
标准输入
标准输出
标准错误
crw------- 1 root root 5, 1 12-16 09:10 /dev/console
用法:mknod 名称 类型
在dev目录下创建两个设备节点:
mknod console c 5 1
mknod null c 1 3
--------------------------------------
2.2、编译
make
2.3、安装
make install
2.4、最小根文件系统
添加lib dev etc
1、拷贝lib//-d 链接文件保留为链接文件
#cp /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/* ./ -d -rf
2、在dev目录下创建两个设备节点:
# mknod console c 5 1
# mknod null c 1 3
ls /dev/console
3、添加配置文件
在etc目录下添加一个配置文件:inittab(格式)
inittab格式:
<id>:<runlevels>:<action>:<process>
id :设备文件 //会在设备文件名添加/dev/
runlevels : 运行级别 ignored
action : 运行时机
process :应用程序/linux命令/shell命令/脚本(bat批处理文件)
# vim inittab
#::sysinit:/etc/init.d/rcS
console::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::restart:/sbin/init
2.5、nfs挂载根文件系统
1、在redhat里开启nfs服务器
# service nfs restart //检测nfs服务器是否存在
# setup//选上nfs 去掉iptables(防火墙)
service iptables stop
2、配置服务,设置nfs文件共享路径
# vim /etc/exports
添加
nfs路径ip地址(权限)
/work/busybox/busybox-1.23.0/_intall *(rw,no_root_squash,sync)
3、使共享路径生效
# exportfs -r
4、查看nfs路径有哪些
# exportfs -v 或者 exportfs
-----------------------------------------------------------
验证nfs是否真正开启成功:直接使用redhat自己挂载nfs
# ls /mnt
# mount -t nfs 192.168.18.3:/work/busybox/busybox-1.23.0/tmp /mnt
# ls /mnt
# umount /mnt //卸载
------------------------------------------------------------
使用开发板来挂载网络文件系统
1、开发板要能ping通redhat(概念)
2、配置
2.1、虚拟机配置为桥接方式
2.2、配置虚拟机-->编辑--->网络编辑
3、重新配置虚拟机地址
# service network restart
4、关闭pc和redhat防火墙
# service iptables stop
--------------------------------------------------------------
让Linux系统找到nfs文件系统:
bootargs 知道从哪里启动文件系统
知道文件系统的格式
知道启动的第一个应用程序
知道以什么作为终端
bootargs=
root=/dev/nfs//告诉Linux内核从什么设备挂载文件系统
nfsroot=192.168.18.3:/work/busybox/busybox-1.23.0/tmp
开发板ip nfs服务器ip网关 掩码 开发板的网卡
ip=192.168.18.123:192.168.18.3:192.168.18.1:255.255.255.0::eth0:off //不启动自动分配ip地址
init=/linuxrc
console=ttySAC0
--------------------------------------------------------------------
set bootargs root=/dev/nfs nfsroot=192.168.43.46:/work/busybox/busybox-1.23.0/_install ip=192.168.43.123:192.168.43.46:192.168.43.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
set bootargs root=/dev/nfs nfsroot=192.168.0.168:/work/root_nfs ip=192.168.0.99:192.168.0.168:192.168.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 115200 lcd=S70 ctp=2 skipcali=y
set bootargs root=/dev/nfs nfsroot=192.168.88.168:/work/buildroot-2014.08/output/target ip=192.168.88.123:192.168.88.168:192.168.88.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=S70 ctp=2 skipcali=y
/disk3/tiny4412_root
set bootargs root=/dev/nfs nfsroot=192.168.0.101:/disk3/zxl4412_root ip=192.168.0.99:192.168.0.101:192.168.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
页:
[1]