arm linux rootfs的制作

本文介绍如何构建一个完整的嵌入式Linux根文件系统,包括编译BusyBox、构建lib目录、创建必要的文件夹结构等内容。文章还详细解释了如何通过不同的方式启动根文件系统。
1、编译busybox, 选择静态链接还是动态链接,生成/bin /sbin /usr/bin /usr/sbin 下  busybox等命令

   make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig 
   make ARCH=arm CROSS_COMPILE=arm-linux-
   make install CONFIG_PREFIX=../rootfs_20150417


    Busybox Settings --->
                Busybox Library Tuning --->
[*] Tab completion            tab键 命令补全
                        [*] Username completion 显示控制命令行提示符有用, 在profile中导出环境变量PS1='[\u@\h \W]\# '
                        [*] Fancy shell prompts       显示控制台命令行提示符有用, 在profile中导出环境变量PS1='[\u@\h \W]\# '
  root@linux   user@hostname
   
2、lib目录构建,拷贝busybox所需的动态库,若busybox是静态编译的,则可以不用
      从工具链中拷贝对应的库


3、etc下文件构建
inittab : init解析文件
init.d/rcS : init解析inittab执行的第一个脚本
fstab : 当执行mount -a时,会自动解析的脚本
hostname : 当执行hostname -F hostname,会修改主机的名字
profile : 环境变量文件,每次启动shell的时候都会,都会解析该文件

调用getty or telnet 登录时,会调用login
getty: Open a tty,printf /etc/issue and prompt for a login name, then invoke /bin/login 

login 会解析passwd、shadow、group文件,并调用shell,所以/etc/profile会被再次解析,对应用户下的.profile以及 .bashrc也会被调用解析
passwd : LOGNAME:PASSWORD:UID:GID:USERINFO:HOME:SHELL 
group             : 组文件
shadow : 用户密码存储在/etc/shadow,格式为(以“:”为分割符)

mdev.conf : mdev的配置文件,后用udev替代
mtab      : 自动生成的文件


4、创建基本的/dev/下节点,根据情况,有些版本可不用创建, /dev/下保持空即可,mdev或者udev已创建好
   /bin/mknod /dev/console c 5 1
   /bin/mknod /dev/null c 1 3 


5、创建其他必须的目录
bin sbin /usr/bin /usr/sbin     -------->由busybox创建
lib    -------->所需的动静态库
etc    -------->启动及环境变量配置
dev    -------->挂载tmpfs,由udev或者mdev生成动态节点
proc    -------->挂载proc文件系统
sys    -------->挂载sysfs文件系统
tmp    -------->挂载tmpfs文件系统
var    -------->syslogd能生成日志文件
boot 
home 
root
media
mnt
opt
lost+found

5、使用工具生成镜像

一页512b

mkyaffs2image-512b-page   rootfs_20150417/   Rootfs_512b.yaffs       

一页2k
mkyaffs2image-2k-page   rootfs_20150417/   Rootfs_2k.yaffs


6、根文件系统的启动
uboot下烧写
#define CONFIG_RUNDR "mw.b 0x30008000 ff 0x56c100;tftp 0x30008000 Rootfs.yaffs;nand erase 0x02d60000 0x56c100;nand write.yaffs 0x30008000 0x2d60000 0x56c100;"   //(521b一页) 0x56c100/(512+16) =10975 yaffs2文件系统的页大小为(512+16)B,因此,烧写的大小应该是这个页大小的整数倍,否则会导致根文件系统起不来
#define CONFIG_RUNDR "mw.b 0x30008000 ff 0x630000;tftp 0x30008000 Rootfs.yaffs;nand erase 0x02d60000 0x630000;nand write.yaffs2 0x30008000 0x2d60000 0x630000;"  //(2k一页)   0x630000%(2048+64) = 0,一页大小要是2048+64的整数倍

从nand flash启动
setenv bootargs "noinitrd root=/dev/mtdblock5 rootfstype=yaffs2 rw init=/sbin/init console=ttySAC0,115200 mem=0x4000000"


从网络启动
setenv bootargs "noinitrd console=ttySAC0,115200 mem=64M init=/linuxrc root=/dev/nfs rw nfsroot=192.168.0.101:/home/smb/uboot_kernel/rootfs_20150417,intr,nolock,proto=tcp,nfsvers=3 ip=192.168.0.110:192.168.0.101:192.168.0.1:255.255.255.0:xlpc:eth0:off"



nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
nfsroot=192.168.0.101:/home/smb/uboot_kernel/rootfs_20150417,intr,nolock,proto=tcp,nfsvers=3


nfsaddrs =    <my-ip>   : <serv-ip>   :   <gw-ip> :  <netmask>  :<name>:<dev>:<auto>

  ip     = 192.168.0.240:192.168.1.200:192.168.1.1:255.255.255.0: xlpc : eth0: off



7、附件中是对应的/etc文件下的文件



为 Ubuntu ARM64 架构创建 rootfs 文件是嵌入式 Linux 开发中的常见需求,通常用于在 ARM 开发板上运行 Ubuntu 系统。以下是完整的制作流程: ### 1. 获取基础文件系统 首先,需要从官方获取适用于 ARM64 架构的基础文件系统。可以访问 Ubuntu 官方镜像站下载适用于 ARM64 的 ubuntu-base 镜像包,例如: ```bash wget http://cdimage.ubuntu.com/ubuntu-base/releases/16.04.1/release/ubuntu-base-16.04.2-base-arm64.tar.gz ``` 该文件是压缩的 rootfs 基础文件系统,包含了 Ubuntu 的最小系统文件[^4]。 ### 2. 解压基础文件系统 将下载的 ubuntu-base 包解压到一个临时目录中: ```bash mkdir ubuntu-rootfs tar -xpf ubuntu-base-16.04.2-base-arm64.tar.gz -C ubuntu-rootfs ``` 该目录将作为目标 rootfs 的根目录,后续操作将在该目录中进行[^4]。 ### 3. 配置网络(可选) 如果需要在 ARM 设备上配置网络,可以在 ubuntu-rootfs 中配置 netplan。在 Ubuntu 18.04 LTS 及以后版本中,使用 netplan 进行网络配置。编辑 `/etc/netplan/` 下的配置文件,例如 `01-netcfg.yaml`: ```yaml network: version: 2 ethernets: eth0: dhcp4: true ``` 保存后运行 `netplan apply` 以应用配置[^3]。 ### 4. 安装必要的软件包(可选) 如果需要在 rootfs 中包含额外的软件包,可以通过 `chroot` 进入 ubuntu-rootfs 目录并安装所需软件包: ```bash sudo chroot ubuntu-rootfs apt update apt install <package-name> exit ``` 这一步可以根据项目需求定制 rootfs 内容,例如安装桌面环境、开发工具等[^2]。 ### 5. 创建 rootfs 镜像文件 接下来需要将 ubuntu-rootfs 打包为一个 ext4 格式的镜像文件: #### 5.1 创建空镜像文件 ```bash dd if=/dev/zero of=rootfs.ext4 bs=1M count=500 ``` 此命令创建一个大小为 500MB 的空镜像文件,可以根据实际需求调整大小。 #### 5.2 格式化镜像文件 ```bash mkfs.ext4 rootfs.ext4 ``` 该命令将镜像文件格式化为 ext4 文件系统。 #### 5.3 挂载镜像文件 ```bash mount -o loop rootfs.ext4 /mnt ``` 将镜像文件挂载到 `/mnt` 目录以便写入数据[^3]。 #### 5.4 写入 rootfs 数据 ```bash sudo cp -rf ubuntu-rootfs/* /mnt/ ``` 将之前准备的 rootfs 内容复制到挂载的镜像文件中。 #### 5.5 卸载镜像文件 ```bash umount /mnt ``` 完成写入后卸载镜像文件[^3]。 ### 6. 收缩镜像文件(可选) 为了优化存储空间,可以对镜像文件进行收缩处理: ```bash e2fsck -p -f rootfs.ext4 resize2fs -M rootfs.ext4 ``` 该步骤可确保镜像文件大小更紧凑,适用于嵌入式设备部署。 ### 7. 烧录到设备 最后,可以使用 `dd` 命令将 rootfs.ext4 镜像文件烧录到 SD 卡或其他存储设备的指定分区中: ```bash sudo dd if=rootfs.ext4 of=/dev/sdX2 bs=4M status=progress ``` 其中 `/dev/sdX2` 是目标设备的分区路径,请根据实际情况修改。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值