当前位置: 代码迷 >> 综合 >> Linux 之 rootfs、busybox、buildroot
  详细解决方案

Linux 之 rootfs、busybox、buildroot

热度:74   发布时间:2023-11-15 06:30:46.0

制作一个文件系统

BUSYBOX

  1. 构建基本文件系统目录 /dev /etc /lib /bin //usr /var /proc /sys /tmp /home /root /mnt /sbin /opt /media
  2. 使用busybox 构建 /bin /slib linuxrc 目录及文件>
    编译busyBox download
    https://developer.arm.com/
	make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-  menuconfigsetting  - >  build as a static binary (空格) - >  cross-compile prefix- >  username completion  Fancy shell prompts Query cur position from terminal - 按 ‘/’ 可搜索。make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- install cd _install && ls
  1. 构建lib 目录:拷贝交叉编译工具的 lib即可。
  2. 构建 etc 目录
    1 ) 重要的文件 :
    inittab :linuxrc的配置脚本
    init.d/ rcS : inittab的第一个二进制汇编脚本。用于挂载系统必须的文件系统和必要的设备连接、设置ip地址、启动其他的开机任务脚本等 默认 的 mount -a
    fstab : 执行 mount -a ,按照此文件挂载系统(by uuid tag-name)
    profile:登陆shell后的脚本 系统环境,
    2 ) cd etc 拷贝busybox/example/bootflooopy/etc/* ./ 拿到模板。
	修改inittab 删除第三行代码  或者 见其他博客 具体修改id::这个子进程的控制台、runlevels、action、 process 等字段。修改etc/initial.d/rcS  文件linuxrc : 产生init进程 PID=1;initttab 启动的第一个进程为该脚本文件, init进程完成了从内核态向用户态的转变#!bin/sh	#1.挂载系统 盘符/bin/mount -a#2. 配置 telnetd 服务器时 需要的文件夹以及文件系统创建 目录 /var/tmp ...   /dev/pts...挂载临时目录系统 devpts....lib下创建 使用条件语句 用来创建文件夹 为驱动模块加载做准备创建设备节点 /sbin/mdev -s#3. 修改 /etc/fstab 文件  按照 实际的情况挂载 开机磁盘盘符及其格式挂在地址...#4. 修改 profiles文件  来初始化path环境变量 以及动态链接库的路径 #5. 用户名 密码 组信息 构建:   /etc/passwd    etc/group   etc/shadow 
  1. 其他目录保持不变即可。
    ALL DONE ,base filesystem built !

  2. 构建镜像 构建虚拟磁盘 qemu 加载启动rootfs(以下内容需要修改 to do )
    mkdir -p path
    mknod path /mydev1 c 128 512
    dd if=/media/.iso of=/dev/mydev1
    制作镜像形式的rootfs并烧录运行
    1、制作镜像形式的rootfs
    (1)新建一个用于挂在的文件这里是ext2_rootfs,这里的count值一定要够用
    dd if=/dev/zero of=rootfs.ext2 bs=1024 count=10240
    losetup /dev/loop1 rootfs.ext2
    ke2fs -m 0 /dev/loop1 10240
    mount -t ext2 /dev/loop1 ./ext2_rootfs/
    (2)向ext2_rootfs中复制内容
    (3)卸载
    umount /dev/loop1
    losetup -d /dev/loop1
    看待rootfs.ext2则制作成功
    2、设置合适的bootargs并烧录镜像
    bootargs为:set bootargs console=ttySAC2,115200 root=/dev/loop1 rw init=/linuxrc rootfstype=ext2
    bootcmd=tftp 0x60003000 uImage;tftp 0x60500000 vexpress-v2p-ca9.dtb;setenv bootargs ‘root=/dev/loop1 rw nfsroot=192.168.33.145:/home/nfs,proto=tcp,nfsvers=4,nolock init=/linuxrc ip=192.168.33.144 console=ttyAMA0’;bootm 0x60003000 - 0x60500000;

BUILDROOT

make list-defconfigs ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-   find -name "*" && ls configs | grep "your arch of CPU "make XXXX_deconfig  ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-  target arch 						--> littleTarget Architecture Variant			--> arm920t,内核类型Target packages   				    --> cmake 工具等BootloaderskernelHost utilitiesmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-