鸣涧 发表于 2022-11-23 23:16:56

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]
查看完整版本: linux开发笔记--busybox根文件系统制作