嵌入式linux启动根文件系统,嵌入式Linux根文件系统制作和挂载

嵌入式Linux系统由三部分组成: uboot、kernel、根文件系统, 还是这张老图

3f288ee285423cc6e29fa526842ca321.png

这里的根文件系统可以说是包含两个部分: 一个是根,一个是文件系统

那么什么是根呢?哈哈 其实根表示的就是第一个的意思

下面贴张图看看整个根文件系统制作的步骤:

3f288ee285423cc6e29fa526842ca321.png

第一步创建目录,这里是在我自己的一个目录下建立一个名为rootfs的目录:

3f288ee285423cc6e29fa526842ca321.png

第二步 :创建设备文件(比如操作串口,其实就是打开一个串口文件,向里面写入读出等)

这里有两个是必须的,其他的暂时不考虑(串口控制台)(这个在dev目录下执行)

3f288ee285423cc6e29fa526842ca321.png

第一个指令console表示是串口控制台设备 c表示是字符设备 5表示主设备号,1表示次设备号

第二个指令暂时也不明白,先放着。

第三步:加入配置文件(主要是etc目录下的)

3f288ee285423cc6e29fa526842ca321.png

第四步:添加内核模块

3f288ee285423cc6e29fa526842ca321.png

这个要进入到Llinux 内核中编译内核模块!

3f288ee285423cc6e29fa526842ca321.png

第二条指令是将编译好的模块拷贝到rootfs目录下的相应目录中

3f288ee285423cc6e29fa526842ca321.png

从这里可以看到当前目录下的一些.ko文件

第五步:编译安装busybox

3f288ee285423cc6e29fa526842ca321.png

先解压,然后进入目录make menuconfig

3f288ee285423cc6e29fa526842ca321.png

3f288ee285423cc6e29fa526842ca321.png

这里直接进入第一项,这里有两项要设置

1. 选中第一项Build BusyBox as a static binary

2. Corss Compile prefix 输入自己交叉编译器的前缀

3f288ee285423cc6e29fa526842ca321.png

3f288ee285423cc6e29fa526842ca321.png

上图中需要设置两个地方,一个是选中第一项 一个是BusyBox installation prefix安装路径这里填写我自己建的目录所在的绝对路径。

3f288ee285423cc6e29fa526842ca321.png

上图中的home写错了,这里先说一下。退出然后保存,make 编译然后make install(其实这里就是执行一个复制功能)(上面的选项其他的暂不配置)安装成功后截图:

3f288ee285423cc6e29fa526842ca321.png

这是也可以去rootfs/bin目录下看看有什么变化,执行之前bin目录下是空的

3f288ee285423cc6e29fa526842ca321.png

这里可以看到很多常用的命令!

第二部分:挂载根文件系统(即如何使用上边制作好的根文件系统)

3f288ee285423cc6e29fa526842ca321.png

3f288ee285423cc6e29fa526842ca321.png

3f288ee285423cc6e29fa526842ca321.png

第一步:

3f288ee285423cc6e29fa526842ca321.png

Initramfs 启动速度快。缺点是掉电后数据丢失!

进入rootfs目录下,创建一个软链接!把系统的Initramfs链接到当前的目录下的busybox下 软链接的名字取为init

然后进入Linux内核中配置make menuconfig配置内核

3f288ee285423cc6e29fa526842ca321.png

进入general setup

3f288ee285423cc6e29fa526842ca321.png

选中图中蓝色部分上面一项Initial RAM filessystem and RAM disk.......

并且进入图中蓝色部分写入自己执着的rootfs路径:

3f288ee285423cc6e29fa526842ca321.png

保存,然后重新编译内核

3f288ee285423cc6e29fa526842ca321.png

编译完成:

3f288ee285423cc6e29fa526842ca321.png

这里将生成的 arch/arm/boot/uImage文件拷贝到tftpboot目录下!(这个可以参考前面的关于自动启动内核设置那篇博文)

3f288ee285423cc6e29fa526842ca321.png

最后一步,设置环境变量:

打开串口终端,连接开发板

设置环境变量:

3f288ee285423cc6e29fa526842ca321.png

3f288ee285423cc6e29fa526842ca321.png

然后tftp uImage c0008000

bootm c0008000启动内核

这里可以看到上面制作的文件系统启动成功

3f288ee285423cc6e29fa526842ca321.png

下面一步来讲述使用NFS来挂着根文件系统!(network file system)

这样有利于开发过程中的同步,即在PC机上更改一些文件能同时同步到开发板上的文件上

这样就省去了每次更改一些内核文件时重新编译工作!(内核开发过程中非常实用,使用NFS是必须掌握的技巧)

首先第一步还是内核配置:

首先取消掉上面选中的Initial RAM filesystem and RAM disk...选项,如图:(这一项是在Gnenral setup选项里面)

3f288ee285423cc6e29fa526842ca321.png

然后进入file systems中

3f288ee285423cc6e29fa526842ca321.png

进入选中图中蓝色选项:

3f288ee285423cc6e29fa526842ca321.png

选中图中蓝色选项,并且进入,选中图中蓝色部分

3f288ee285423cc6e29fa526842ca321.png

然后退出保存,然后在重新编译make uImage ARCH=arm CROSS_COMPILE=arm-linux-

3f288ee285423cc6e29fa526842ca321.png

同上将uImage拷贝到tftpboot目录下,

然后剩下的就是设置nfs环境变量了

3f288ee285423cc6e29fa526842ca321.png

我电脑linux的ip 是192.168.1.111, 开发板的ip是192.168.1.110

所以这里我设置的环境变量为

setenv bootargs noinitrd console=ttySAC0,115200 init=/init root=/dev/nfs rw nfsroot=192.168.1.111:/home/S3-ARM/rootfs,proto=tcp,nfsvers=3 ip=192.168.1.110:192.168.1.111:192.168.1.1:255.255.255.0::eth0:off设置完后然后saveenv一下

tftp c0008000 uImage

bootm c0008000

然后看一张截图,就是我在pc机的linux上的rootfs目录下建立一个Text.txt文件,可以看到这个文件立刻就可以在开发板上看到。

3f288ee285423cc6e29fa526842ca321.png

这在内核开发基本是必备技能!用起来是相当方便的!

这里NFS挂载补充一点:/etc/init.d/nfs restart 启动nfs服务器

第二点:

vim /etc/exports 文件 输入一下内容,这个是我的rootfs文件路径(这里的意思就是NFS要挂在的目录是哪个,然后挂载属性是什么)

3f288ee285423cc6e29fa526842ca321.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqlite 查询 支持多用户同时_SQLite支持多进程同时操作数据库文件吗?

多个进程可以同时打开同一个数据库。多个进程可以同时执行SELECT。但是,只有一个进程可以随时对数据库进行更改。SQLite使用读/写锁来控制对数据库的访问。(在Win95 / 98 / ME下,缺少对读写锁的支持,而是使用概率模拟。)但请注意:…

python 字符串处理 字典_python 字符串和字典

一、字符串操作name "my name is \t {name} and i am {year} years old"1.首字母大写print(name.capitalize())2.统计字符串中相同的字符print(name.count("n"))3.格式化字符串print(name.center(50,"-"))#打印50个-,把name的值放中…

查询linux上调度命令,浅析Linux中crontab任务调度

一.创建调度任务指令crontab -e 进入当前用户编辑界面crontab -u 用户名 -e 进入指定用户编辑界面进入crontab任务编辑界面任务编写格式#每分钟执行查看一次/ect目录,把目录内容写进/tml/a.txt下*/ 1 * * * * ll /etc >> /tmp/a.text#crontab对象 指令#多个任务同时执行#…

pgsql 查询每天的最后一条_Qamp;A | 如何允许他人查询表单数据?

小金Q&A来啦!这一期小金Q&A中,小金收集到近期大家关注最多的几个问题。小金将定期为小金人们答疑解惑,帮助你每天用好小金一点。●Q&A●问:如何批量设置新数据微信提醒?答:点击右上角头像 个人…

pythonjson构建二维数组_python后台获取ajax传递的二维数组,保持原有数据结构不变...

python后台获取ajax传递的二维数组,保持原有数据结构不变。前台主要程序:arr_data [[1,2,3],[4,5,6]];//创建二维数组var json_data JSON.stringify(arr_data);//将二维数组转换为json格式//ajax将json_data传入后台$.ajax({url : "/path",d…

linux多线程访问共享资源,多个线程访问共享对象和数据

多个线程访问共享对象和数据有很多方式,但是可以分为两大类:1.多线程执行代码相同的。2.多线程执行代码不同的对于多线程执行代码相同的情况来说:1)使用同一个Runnable对象,在new Thread的时候放入相同的这个对象public static vo…

linux关闭交互模式,linux – 关闭cp(copy)命令的交互模式(cp:overwrite?)

推荐文章更新源的方法提前保存一下原来源 sudo cp sources.list sources.list.bak 换源命令: sudo gedit /etc/apt/sources.list 或者 sudo vim /etc/apt/sources.list 或者 sudo vim /etc/apt/sources.list推荐文章1 删除内容gg 顶部G 底部:set nu 显示行号:10,.d …

sql截去最后一位_SqlServer从左边 最后 中间截取字符串

SqlServer从左边 最后 中间截取字符串(摘录)2009-06-01 15:04已知: 字段AF:\photo\Winter Leaves.jpg要求:分段截取每段字符[字段A不能为TEXT类型,否则报错]解决方法:---截取字符串A的第一个\左边的字符串select left(A,charindex(/,A)-1) MEMO:charindex(\,A)-1 -在字符…

linux 解压tar.jz,linux系统压缩文件和解压缩命令

linux系统压缩文件和解压缩命令tar命令   解包:tar zxvf FileName.tar打包:tar czvf FileName.tar DirName gz命令   解压1:gunzip FileName.gz解压2:gzip -d FileName.gz压缩:gzip FileName.tar.gz 和 .tgz解压&a…

linux redis-4.0,Linux Redis 4.0.2 安装部署

Linux Redis 4.0.2 安装部署01 安装GCCyum -y install gcc gcc-c libstdc-devel tcl -y02 下载安装包cd /export/software/wget http://219.238.7.71/files/403400000ABE0C0C/download.redis.io/releases/redis-4.0.2.tar.gztar -zxvf redis-4.0.2.tar.gz -C ../serverscd /exp…

ncverilog脚本_NC-Verilog仿真详解

ncverilog仿真详解发表在ASIC/FPGA/汇编, 学习笔记, 编程开发 | 由阿布 | 十一月26, 2011 | 0标签: ncverilog, 仿真数位IC工具简介——Simulator 工具ModelSimModelSim是Mentor公司所推出的软体, 主要用来当作VHDL的模拟器, 也是目前CIC在VHDL方面的主要的模拟软体;但ModelSim…

android 串口一直打开_android 若何打开串口以及与串口通信

串口 若何 打开 通信 android android 串口通讯 androidusb转串口通讯 android 蓝牙串口通讯 android串口通讯demo ble串口通讯 android android 打开通讯录 android打开串口 android 打开串口失败 android如何打开串口串口通信,对于没接触过这方面的伴侣们&#xf…

海康9800平台linux的sdk,流媒体项目外包海康9800平台sdk适配

1. 整体流程图,见附件;2. 任务描述:1》海康9800平台sdk适配;需要研究信令协议及开发对接程序(登陆平台,获取设备的列表,开启实时预览,停止实时预览等);需要研究音视频流的传输协议及…

python假设税前工资和税率如下_Python来做假设检验

对于任何一个频率派的数据科学家而言,日常做数据分析难免还是会用到一些假设检验方法做一个数据探索和相关性、差异性分析,并且这也是做后续统计模型(机器学习类预测模型可以略过)预测的第一步。这篇博文目的就是整理基本的假设检验方法、适用条件和调用…

linux fall delay 10,Cell的Rise delay和Fall delay、Rise transition和fall transition

Cell的Rise delay和Fall delay、Rise transition和Fall transition介绍:如下图所示为一个Cell的lib中关于cell_rise/cell_fall、rise_transition/fall_transition的描述:在NLDM模型的.lib中,cell_rise/cell_fall它描述的是Cell从输入到输出的…

linux定时器无法重启pm2,pm2无法自动重启

Hawk 3. 网页采集器1.基本入门 1. 原理(建议阅读) 网页采集器的功能是获取网页中的数据(废话).通常来说,目标可能是列表(如购物车列表),或是一个页面中的固定字段(如JD某商品的价格和介绍,在页面中只有一个).因此 ...man asciiLinux 2.6 - man page for ascii (linu…

linux ps 详解 博客,Linux PS 命令 详解(转)

Linux操作系统PS命令详细解析(转)要对系统中进程进行监测控制,用 ps 命令满足你。/bin/psps 是显示瞬间行程的状态,并不动态连续;如果想对进程运行时间监控,应该用 top 工具。kill 用于杀死进程。ps 的参数说明l 长格式输出&#…

三维空间坐标的旋转算法详解_视觉slam | 三维空间刚体运动的五种表达:旋转矩阵 变化矩阵 欧拉角 旋转向量 四元数及互相转换...

原po:高翔slam十四讲-刚体运动1.旋转矩阵考虑一次旋转Before: 坐标系(e1,e2,e3), 向量(a1,a2,a3)After: 坐标系(e1,e2,e3), 向量(a1,a2,a3)即得到a Ra R 称为旋转矩阵(R是一个正交矩阵, 行列式为1) 考虑旋转平移欧拉定理(Euler’s rotation theorem&…

c语言 字符串相似度,某课程设计---文件相似度判断

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼//返回两个文件操作是否都成功return ( result1 && result2 );}//功能:将数据存储到文件内//输入:const char * FileName----想写入数据的文件名// :const char * Data----想写入的数据//输出:无//返回值:布尔型---真表…

python2版本异常_Python to.exe引发异常:此项目的版本控制需要sdisttarb

我试图从Python文件构建一个可执行文件。我能纠正大多数错误,但现在我被这一个卡住了,我不知道如何改正它。我的程序与jiraapi交互。在我使用Cx_Freeze来构建具有以下设置的.exe。py文件:import sysimport setuptoolsfrom cx_Freeze import s…