根文件系统rootfs的移植及制作镜像ramdisk.img

2023-05-16

根文件系统的移植

介绍

【1】移植根文件系统的工具 —> busybox
1. 短小精悍 2. 版本更新较快,版本之间差异不大
【2】 如何获取busybox
1)https://busybox.net/downloads/
选择busybox-1.32.0.tar.bz2版本
2)前往我的博客里下载

使用busybox工具制作根文件系统

1. 拷贝busybox-1.32.0.tar.bz2到ubuntu中
2. 解压缩 tar -vxf busybox-1.32.0.tar.bz2
3. 进入到busybox-1.32.0目录 cd busybox-1.32.0
4. 切换交叉编译器为gcc-4.9.4版本(高点的版本)
5. 配置编译busybox

1> 修改Makefile配置交叉编译器
164 CROSS_COMPILE ?=
190 ARCH ?= $(SUBARCH)
修改为 :
164 CROSS_COMPILE ?= arm-none-linux-gnueabi-
190 ARCH ?= arm
2> 清除中间文件
make distclean
3> 执行make menuconfig进行图形化界面配置
make menuconfig
a) 采用静态编译,不使用动态库
Settings —> [星号]Build static binary (no shared libs) 星号:*
b) 采用vi风格的命令行编辑
Settings —> [星号]vi-style line editing commands 星号:*
c) 修改根文件系统的安装路径 Settings —> (./rootfs) Destination path for ‘make install’
d) 支持完整的模块化命令 Linux Module Utilities —> [ ] Simplified modutils 去掉*
4> 编译busybox make all
5> 安装根文件系统 make insta
6> 测试新生成的根文件系统
将新生成的根文件系统拷贝到nfs目录下下 cp rootfs ~/nfs -rf
6,启动开发板
启动成功,但是有错误信息如下:
can’t run ‘/etc/init.d/rcS’: No such file or directory
can’t open /dev/tty2: No such file or directory
can’t open /dev/tty3: No such file or directory
can’t open /dev/tty4: No such file or directory

解决无法进入根文件系统的步骤

1)文件不存在就创建文件
在根文件系统中创建etc/init.d目录,并创建rcS文件 并修改rcS文件的权限为777,
$ cd ~/nfs/rootfs
$ mkdir -p etc/init.d
$ cd etc/init
$ touch rcS
$ chmod 777 rcS
打开rcS文件,并添加一下内容:
#!/bin/sh
/bin/mount -a
echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s
创建dev目录: $ cd ~/nfs/rootfs $ mkdir dev
2)再次启动开发板出现下图样式
在这里插入图片描述
解决: 在etc目录下创建fatab文件
$ cd ~/nfs/rootfs
$ cd etc $ touch fstab
打开fstab,并添加一下内容:
#device mount-point type options dump fsck orde
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
在这里插入图片描述
/etc/init.d/rcS: line 3: can’t create /proc/sys/kernel/hotplug: nonexistent directory 解决办法:
$ cd ~/nfs/rootfs
$ mkdir proc

mdev: /sys/dev: No such file or directory 解决办法:
$ cd ~/nfs/rootfs $ mkdir sys
3)再次启动开发板观察现象
在这里插入图片描述
解决办法: $ cd ~/nfs/rootfs $ mkdir tmp
4)再次重启开发板,观察现象
在这里插入图片描述
解决办法: 在etc目录下创建inittab文件
$ cd ~/nfs/rootfs
$ cd etc $ touch inittab 打开inittab文件,并添加一下内容
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
5)再次重启开发板,观察现象。
根文件系统基本制作成功。
将其他的几个文件创建出来: mkdir lib home mnt root var
6)进入根文件系统成功
发现用户名没有 解决方案:
在这里插入图片描述
在etc目录下创建profile文件,并添加一下信息:
export HOSTNAME=… (…:改为自己设的名字)
export USER=root
export HOME=root
#export PS1=“[\u@\h \W\ ]$ "
#cd root
export PS1=”[ U S E R @ USER@ USER@HOSTNAME \W]# "
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH
在这里插入图片描述
7)测试根文件系统
编译hello.c的应用程序,使用交叉编译器进行编译,
拷贝到开发板中去运行,查看运行结果。运行之后出现以下出错误:
在这里插入图片描述
使用以下命令查看hello依赖的动态库是: arm-none-linux-gnueabi-readelf -d hello
在这里插入图片描述
解决办法: 移植动态库到根文件系统中 从交叉编译器中找对应的动态库。
$ cd ~/toolchain/gcc-4.9.4 $ find . -name libc.so.6
在这里插入图片描述
将交叉编译器./arm-none-linux-gnueabi/sysroot/lib/ 目录中的所有的动态库,
全部拷贝到根文件系统的lib目录下
$ cp -rf ./arm-none-linux-gnueabi/sysroot/lib/* ~/nfs/rootfs/lib
在这里插入图片描述
在这里插入图片描述

将rootfs打包生成ramdisk.img的镜像文件

1,将根文件系统(rootfs)制作成根文件系统镜像(ramdisk.img)
进入到ubuntu的家目录 cd ~

执行如下命令制作一个大小为8M的镜像文件 dd if=/dev/zero of=ramdisk bs=1k count=8192

将该镜像格式化为ext2格式 mkfs.ext2 -F ramdisk

将该镜像文件挂载到ubuntu下的/mnt目录下 sudo mount -t ext2 ramdisk /mnt

删除库文件中的符号表减小库文件体积: su root$ arm-none-linux-gnueabi-strip lib/* (下图错误不用搭理)
在这里插入图片描述
效果如下图
在这里插入图片描述
将制作的根文件系统中所有的文件拷贝到该镜像中 :sudo cp -a /home/linux/nfs/rootfs/* /mnt/

解除挂载 sudo umount /mnt

压缩镜像 gzip --best -c ramdisk > ramdisk.gz

使用mkimage为镜像文件添加校验头然后生成可用的镜像ramdisk.img
mkimage -n “ramdisk” -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img
在这里插入图片描述
将制作生成的根文件系统镜像拷贝到tftp的下载目录下并修改其权限
cp ramdisk.img /home/linux/tftpboot/$ chmod 777 /home/linux/tftpboot/ramdisk.img

重新配置linux内核使其支持ramdisk文件系统进入到的linux源码的顶层目录下
cd kernel-3.4.39/

执行以下命令进入内核配置界面
make menuconfig (如果ubuntu没安装,就先安装一个 )
在图形化界面中进入到“Device Drivers —>”菜单,
再进入“[*] Block devices —>”菜单,将 “RAM block device support” 选为“Y”,
将“Default RAM disk size (kbytes)”修改为“8192”,如图所示:
在这里插入图片描述

配置完成后保存退出。
回到内核源码的顶层目录下重新编译内核源码(将交叉编译器切换到4.5.1版本*****低版本,可以在我的博客下载)
make uImage
将生成的uImage文件拷贝到tftp服务器的下载目录中:
cp arch/arm/boot/uImage /home/linux/tftpboot/
chmod 777 /home/linux/tftpboot/uImage
3,将新生成的内核镜像uImage和根文件系统镜像ramdisk.img烧写到EMMC中并从EMMC中启动测试
【产品阶段系统部署方式(项目完成)】
uboot —>EMMC/SD卡
uImage —>EMMC/SD卡
ramdisk.img —>EMMC/SD卡
1> 将内核镜像uImage烧写到EMMC中
tftp 0x41000000 uImage mmc write 0x41000000 0x800 0x4000
在这里插入图片描述
2>. 将根文件系统镜像ramdisk.img烧写到EMMC中
tftp 0x41000000 ramdisk.img mmc write 0x41000000 0x20800 0x20800
在这里插入图片描述
3>. 设置uboot的启动参数

setenv bootcmd mmc read 0x48000000 0x800 0x4000; mmc read 0x49000000 0x20800 0x20800; bootm 0x48000000 0x49000000
saveenv

setenv bootargs root=/dev/ram rw initrd=0x49000040,0x1000000 rootfstype=ext4 init=/linuxrc console=ttySAC0,115200
saveenv

到此如果串口工具软件可以通过U-boot自启动并且进入根文件系统,则表示完成

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根文件系统rootfs的移植及制作镜像ramdisk.img 的相关文章

  • Introduction写作常用句式

    Introduction 引言部分介绍此项研究的主题 背景 范畴 xff0c 并说明全文的结构 xff0c 便于读者阅读 xff0c 一般包含几项内容 xff1a 1 背景介绍 2 现有问题 3 研究目标 4 篇章结构 1 背景介绍 has
  • mysql中的CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP

    在mysql中 xff0c 如果类型为时间的列设置了CURRENT TIMESTAMP xff0c 那么在insert一条新记录的收 xff0c 时间字段自动获取到当前时间 xff0c 如果设置了ON UPDATE CURRENT TIME
  • vncviewer使用教程

    首先安装vncviewer 之后在服务器输入你想要开启的 端口号 conda deactivate vncserver 88 VNC Server这里写 你的服务器地址 5900 43 端口号 如果出现以下问题 xff0c 可能是配置文件的
  • podman常见使用命令

    常用命令 容器 podman run 创建并启动容器 podman start 启动容器 podman ps 查看容器 podman stop 终止容器 podman restart 重启容器 podman attach 进入容器 podm
  • 对子模函数(submodular function)的一些理解

    1 子模函数是一个集合函数 xff0c 又减小回转属性 xff08 diminishing returns 子模函数适用于多种应用 xff0c 包括近似算法 xff0c 博弈理论 xff0c 和电网络 2 标准定义 xff1a 如果是一个集
  • 二项分布(np.random.binomial),搞它就完了

    二项分布 xff08 np random binomial xff09 xff0c 搞它就完了 xff01 首先我们的搞清楚伯努利分布和二项分布 xff0c 我们先找个例子 xff0c 选西瓜 xff0c 待我细细道来 伯努利分布 选一个西
  • Numpy给数组增加维度的操作

    不说其他的 xff0c 直接给个例子就懂了 a是一个一维数组 a 61 np array 0 0 10 0 20 0 30 0 print a shape a np newaxis a np newaxis shape 输出 4 0 10
  • 参数辨识的简单理解

    1 参数辨识技术 xff0c 是一种将理论模型与试验数据结合起来用于预测的技术 参数辨识根据实验数据和建立的模型来确定一组模型的参数 xff0c 使得由模型计算得到的数值结果能最好地拟合测试数据 xff08 可以看做是一种曲线拟合问题 xf
  • Matlab中持久变量(persistent)在Python中的理解

    语法 persistent var1 varN 说明 persistent 将变量var1 varN 声明为持久变量 持久变量是声明它们的函数的局部变量 xff1b 但其值保留在对该函数的各次调用所使用的内存中 xff0c Matlab命令
  • 新的代数计算软件包——Magma

    Magma是一款由悉尼大学数学与统计学系计算代数学小组开发的功能强大的代数计算程序包 xff0c 该软件专门解决代数系统中的数论 代数几何和代数组合学的计算问题 新的代数计算软件包 Magma 前言一 Magama安装二 基本操作三 多项式
  • 基于ChatGPT的新一代辅助编程神器——Cursor

    Cursor 编辑器 Cursor 这是一款与OpenAI合作并且基于GPT3的新一代辅助编程神器 它支持多种文件类型 xff0c 支持格式化文本 xff0c 支持多种主题 xff0c 支持多语言语法高亮 xff0c 支持快捷键设置 xff
  • 2023 Microsoft Edge 新增的分屏功能

    Microsoft Edge Canary 通道目前已经发布 110 版 xff0c 本次更新带来一个非常实用的实验性功能 xff1a 同窗双屏功能 xff0c 可以在一个窗口里同时开两个网页并排看 如何开启分屏功能 xff1f 默认分屏功
  • ubuntu服务器图形界面崩溃解决方案

    你们看的没错 xff0c 我又来了 真的是 xff0c 读计算机不易啊 我又又又把机器搞坏了 就单纯的程序跑不通 xff0c 网上搜解决方案是说好像这个文件夹名带中文 xff0c 明明我修改过了 xff0c 想着重启一下吧 xff0c 然后
  • Mysql备份和恢复

    一 数据备份的重要性 备份的主要目的是灾难恢复 在生产环境中 xff0c 数据的安全性至关重要 任何数据的丢失都可能产生严重的后果 造成数据丢失的原因 1 程序错误 2 人为操作错误 3 运算错误 4 磁盘故障 5 灾难 xff08 火灾
  • FreeRTOS中任务的四种状态

    FreeRTOS任务的四种状态分别是 xff1a 就绪态 运行态 阻塞态 挂起态 各种状态的说明如下 xff1a 1 就绪态 xff1a 处于就绪态的任务是那些已经准备就绪 这些任务没有被阻塞或者挂起 xff0c 可以运行的任务 xff0c
  • BP神经网络实现汽油辛烷值预测,《MATLAB源码+数据集》

    发展背景 在人工神经网络的发展历史上 xff0c 感知机 Multilayer Perceptron xff0c MLP 网络曾对人工神经网络的发展发挥了极大的作用 xff0c 也被认为是一种真正能够使用的人工神经网络模型 xff0c 它的
  • ELM极限学习实现汽油辛烷值预测(MATLAB)

    什么是极限学习机 xff1f 极限学习机 xff08 ELM Extreme Learning Machines xff09 是一种前馈神经网络 xff0c 最早由新加坡南洋理工大学黄广斌教授于2006年提出 该算法具有良好的泛化性能以及极
  • 粒子群算法(PSO)测试函数寻优

    3 1粒子群算法 粒子群优化算法是一种模拟鸟群捕食活动的进化算法 xff0c 体现了种群相互协作行为的群体智能 在处理优化问题时 xff0c 每个粒子对应搜索空间的一个潜在方案 xff0c 在进化过程中基于适应度函数进行选择和记录 xff0
  • 解决路由器离自己电脑远的问题:电脑和Linux开发板通过网线口连接,实现电脑与虚拟机,虚拟机与电脑、开发板和虚拟机实现网络ping回复。

    第一步 xff1a 关闭防火墙 xff0c 打开网络 internet 设置 xff1b 第二步 xff1a 找到更改适配器选项 xff1b 第三步 xff1a 找到 本地连接 双击它 xff1b 第四步 xff1a 点击属性 xff1b
  • 解决ubuntu中使用make命令报错的问题

    ubuntu界面出现 xff1a make arm linux gnueabihf xff1a 命令未找到 bin sh 1 arm linux gnueabihf not found dirname 缺少操作数 Try 39 dirnam

随机推荐