首页 > 其他分享 >05步:制作根文件系统

05步:制作根文件系统

时间:2023-09-24 16:48:38浏览次数:46  
标签:bin 05 sudo mkdir 文件系统 dev cd home 制作

原文:https://www.zhaixue.cc/qemu/qemu-build_busybox_rootfs.html

5.1 编译、安装根文件系统

根文件系统的安装方法有很多,这里我们为了方便,安装最为简单和轻量的busybox

  1. # cd /home/tftpboot
  2. # mkdir filesys
  3. # cd filesys
  4. # wget https://busybox.net/downloads/busybox-1.35.0.tar.bz2
  5. # tar -xvf busybox-1.35.0.tar.bz2
  6. # cd busybox-1.35.0
  7. # sudo mkdir -p /home/nfs
  8. # sudo chmod 777 /home/nfs/

配置Makefile

  1. # gedit Makefile +191

和编译kernel的时候一样,ARCH和CROSS_COMPILE配置成arm编译器

  1. ARCH ?= arm
  2. CROSS_COMPILE = arm-linux-gnueabi-

和kernel一样,输入make menuconfig进行一些配置
(1) 设置一下编辑器环境,方便操作:
Settings —-> [*] vi-style line editing commands (New)

(2) 设置一下安装路径,避免错误安装在根目录
Settings —-> Destination path for ‘make install’

进入以后,输入自己的rootfs的路径(我这里的路径是: /home/nfs)

设置完毕,设置编译安装:

  1. # make install -j 2

无需再输入单独的编译命令,没有编译的话默认是会编译好了再安装的
注意!!!!!这里不要以root用户编译也不要加sudo编译,防止安装到根目录里,破坏Ubuntu
我们通常设置的安装模式安装到的/home/tftpboot已经给了最高权限,是肯定可以安装的,如果错误设置不安装到这个地方就会因为没有权限导致安装不上,从而完全避免了安装到根目录导致Ubuntu崩溃的问题。
如下图,就是错误的将安装目录设置为根目录的时候,因为没有权限没有执行安装过程,从而避免了因为错误安装导致的系统崩溃。

正常安装以后:

基本系统的功能是有了,接下来的功能便是安装动态链接库、设置设备节点、设置初始化进程、设置文件系统、设置环境变量

5.2 完成完整的根文件系统的构建

5.2.1 安装动态链接库

通过apt安装的arm编译器,动态链接库路径通常为:/usr/arm-linux-gnueabi/lib,复制到根文件系统的lib下

  1. # cd /home/nfs
  2. # mkdir lib
  3. # cd /usr/arm-linux-gnueabi/lib
  4. # cp *.so* /home/nfs/lib -d

若在运行linuxrc时失败,库的版本不兼容等,解决方法是编译busybox时,配置静态编译:

  1. [*] Build static binary (no shared libs)

这样linuxrc运行时就不依赖动态库了,就可以正常运行了。

5.2.2 创建设备结点

  1. # cd /home/nfs
  2. # mkdir dev
  3. # cd dev
  4. # sudo mknod -m 666 tty1 c 4 1
  5. # sudo mknod -m 666 tty2 c 4 2
  6. # sudo mknod -m 666 tty3 c 4 3
  7. # sudo mknod -m 666 tty4 c 4 4
  8. # sudo mknod -m 666 console c 5 1
  9. # sudo mknod -m 666 null c 1 3

5.2.3 设置初始化进程/etc/rcS

  1. # cd /home/nfs
  2. # mkdir -p etc/init.d
  3. # cd etc/init.d
  4. # touch rcS
  5. # chmod 777 rcS
  6. # gedit rcS

将以下内容加入rcS中

  1. #!/bin/sh
  2. PATH=/bin:/sbin:/usr/bin:/usr/sbin
  3. export LD_LIBRARY_PATH=/lib:/usr/lib
  4. /bin/mount -n -t ramfs ramfs /var
  5. /bin/mount -n -t ramfs ramfs /tmp
  6. /bin/mount -n -t sysfs none /sys
  7. /bin/mount -n -t ramfs none /dev
  8. /bin/mkdir /var/tmp
  9. /bin/mkdir /var/modules
  10. /bin/mkdir /var/run
  11. /bin/mkdir /var/log
  12. /bin/mkdir -p /dev/pts
  13. /bin/mkdir -p /dev/shm
  14. /sbin/mdev -s
  15. /bin/mount -a
  16. echo "-----------------------------------"
  17. echo "*****welcome to vexpress board*****"
  18. echo "-----------------------------------"

5.2.4 设置文件系统/etc/fstab

  1. # cd /home/nfs/etc
  2. # touch fstab
  3. # gedit fstab

输入以下内容:

  1. proc /proc proc defaults 0 0
  2. none /dev/pts devpts mode=0622 0 0
  3. mdev /dev ramfs defaults 0 0
  4. sysfs /sys sysfs defaults 0 0
  5. tmpfs /dev/shm tmpfs defaults 0 0
  6. tmpfs /dev tmpfs defaults 0 0
  7. tmpfs /mnt tmpfs defaults 0 0
  8. var /dev tmpfs defaults 0 0
  9. ramfs /dev ramfs defaults 0 0

5.2.5 设置初始化脚本/etc/inittab

  1. # cd /home/nfs/etc
  2. # touch inittab
  3. # gedit inittab

输入以下内容:

  1. ::sysinit:/etc/init.d/rcS
  2. ::askfirst:-/bin/sh
  3. ::ctrlaltdel:/bin/umount -a -r

5.2.6 设置环境变量/etc/profile

  1. # cd /home/nfs/etc
  2. # touch profile
  3. # gedit profile

输入以下内容:

  1. USER="root"
  2. LOGNAME=$USER
  3. export HOSTNAME=`cat /etc/sysconfig/HOSTNAME`
  4. export USER=root
  5. export HOME=/root
  6. export PS1="[$USER@$HOSTNAME \W]\# "
  7. PATH=/bin:/sbin:/usr/bin:/usr/sbin
  8. LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
  9. export PATH LD_LIBRARY_PATH

5.2.7 增加主机名/etc/sysconfig/HOSTNAME

  1. # cd /home/nfs/etc
  2. # mkdir sysconfig
  3. # cd sysconfig
  4. # touch HOSTNAME

输入以下内容:

  1. vexpress

5.2.8 创建剩下的文件夹

  1. # cd /home/nfs
  2. # mkdir mnt proc root sys tmp var

5.3 封装构建好的根文件系统,并挂载

  1. # cd /home/
  2. # sudo mkdir temp
  3. # sudo dd if=/dev/zero of=rootfs.ext3 bs=1M count=32
  4. # sudo mkfs.ext3 rootfs.ext3
  5. # sudo mount -t ext3 rootfs.ext3 temp/ -o loop
  6. # sudo cp -r nfs/* temp/
  7. # sudo umount temp
  8. # sudo mv rootfs.ext3 tftpboot
  9. # cd /home/tftpboot
  10. # sudo gedit start.sh

更改启动脚本start.sh:
和前面一样,root登录才能启动

  1. qemu-system-arm \
  2. -M vexpress-a9 \
  3. -m 512M \
  4. -kernel zImage \
  5. -dtb vexpress-v2p-ca9.dtb \
  6. -nographic \
  7. -append "root=/dev/mmcblk0 rw console=ttyAMA0" \
  8. -sd rootfs.ext3

如图,挂载成功,内核版本也是课程配套的5.10.99版本

如果想设置为LCD启动的话,将start.sh改一下就好

  1. qemu-system-arm \
  2. -M vexpress-a9 \
  3. -m 512M \
  4. -kernel zImage \
  5. -dtb vexpress-v2p-ca9.dtb \
  6. -append "root=/dev/mmcblk0 rw console=tty0" \
  7. -sd rootfs.ext3

效果图如图:

不用买开发板,使用QEMU就可以学习的Linux内核开发实战视频教程:《Linux内核编程》,具有一线芯片原厂开发经验的驱动工程师录制,详情点击:王利涛老师个人淘宝店:Linux内核编程

标签:bin,05,sudo,mkdir,文件系统,dev,cd,home,制作
From: https://www.cnblogs.com/bruce1992/p/17726154.html

相关文章

  • Hadoop是什么? Hadoop是一个由Apache开发的开源分布式计算框架,它能够处理大规模数据并
    Hadoop是什么?Hadoop是一个由Apache开发的开源分布式计算框架,它能够处理大规模数据并行处理任务,支持大规模数据存储和处理。Hadoop的核心组件包括分布式文件系统HDFS和分布式计算框架MapReduce,它们使得Hadoop可以在廉价的硬件上并行地处理大量数据。Hadoop还包括很多相关的项目和子......
  • 关于部分买家的主板BIOS升级操作说明,针对畅网的N5105 N6005 J6412 J6413的BIOS升级操
    说明:因为BIOS更新了,修复一些小问题,如果你有需要更新请按我的傻瓜式步骤操作。本次升级涉畅网的NAS51056005的主板和小主机V1V2V3V4V5版本的BIOS更新,本次更新bios同步更新cpu微码。更新后部分界面有些许变化。操作步骤:NAS主板部分先看下原先的bios版本,2022/08/31下面......
  • Centos7.9+Oracle11g 单机文件系统安装注意事项
    数据库软件(上传至/root目录)p13390677_112040_Linux-x86-64_1of7p13390677_112040_Linux-x86-64_2of7其他软件包(上传至/root目录)compat-libstdc++-33-3.2.3-72.el7.x86_64.rpmpdksh-5.2.14-37.el5_8.1.x86_64.rpm安装软件包#安装compat包rpm-ivhcompat-libstdc++-33-3.2.3-72.el7......
  • Dcoekr 制作 jdk-17 镜像
    Dcoekr制作jdk-17镜像参考文档:jdk17.0.4.1镜像-_ideal-博客园(cnblogs.com)Docker之dockerfile制作jdk镜像-沦陷-博客园(cnblogs.com)((20230307193521-hke61kh'JDK官网下载'))编写DockerfileFROMcentos:7MAINTAINERxxx"[email protected]"WORKDIR/javaxh_......
  • 制作基于 apline 的 jdk11 环境
    制作基于apline的jdk11环境没有搞定的方法:https://blog.csdn.net/qq_43059674/article/details/103356158https://juejin.cn/post/7082235890180816904以上两种方法都试过了,没有成功。也不想深究原因了,主要是执行到RUN命令时报错:Step4/10:ADDopenjdk-11.0.2_linux-......
  • LayUI-05
    4.2分页laypagelaypage的使用非常简单,指向一个用于存放分页的容器,通过服务端得到一些初始值,即可完成分页渲染:快速使用<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>layPage快速使用</title><linkrel="stylesheet"href="/stat......
  • LVM中对基于xfs的文件系统进行扩容
    Xfs是CentOS7的默认文件系统类型,而不同文件系统类型对应的创建、检查、调整命令不同。在xfs文件系统中,只能增大分区而不能减小。[root@localhost~]#ls/lib//modules/3.10.0-229.20.1.el7.x86_64/kernel/fs#查看内核所支持的所有文件系统类型binfmt_misc.kocephdlm......
  • Hadoop是什么? Hadoop是一个由Apache开发的开源分布式计算框架,它能够处理大规模数据并
    Hadoop是什么?Hadoop是一个由Apache开发的开源分布式计算框架,它能够处理大规模数据并行处理任务,支持大规模数据存储和处理。Hadoop的核心组件包括分布式文件系统HDFS和分布式计算框架MapReduce,它们使得Hadoop可以在廉价的硬件上并行地处理大量数据。Hadoop还包括很多相关的项目和子......
  • 05_其他关键字
    其他关键字const只读只能初始化,不能赋值,只读register寄存器如果变量被高频使用,会自动将变量存储在寄存器中,目的:提高访问效率如果用户想将变量直接放入寄存器中,可以使用register修饰寄存器变量volatile强制访问内存volatileintdata=0;//访问data强......
  • 怎么制作手写电子签名?
    https://zhuanlan.zhihu.com/p/157419337年初在家办公,多次遇到需要在电子版文档上手写签名,以前的我习惯了打印出来再签字,但家里又没有打印机,可难倒了我…直到一个程序员朋友告诉了我几个傻瓜式操作方法,才发现手写电子签名也没那么难嘛。记得当时也去网上寻找解决方式,发现大家都......