基于mini2440嵌入式Linux根文件系统制作(Initramfs和nfs两种跟文件系统)
嵌入式系统由三部分构成:
1、bootoader---bootparameters---2、kernel 3、Root-filesysytem
一个内核可以挂载多个文件系统,但是有一个根文件系统所以叫root-filesysytem,bootloader引导程序和kernel内核程序之间有个引导参数(也叫启动参数)叫bootparameters,这里就不多介绍引导参数,这里就介绍根文件系统地制作。
1.1、创建目录,创建rootfs目录,再创建以下目录和子目录
mkdir rootfs
cd rootfs
mkdir bin dev etc lib proc sbin sys usr mnt tmp var
mkdir usr/bin usr/lib usr/sbin lib/modules
1.2、创建设备文件
cd rootfs/dev
mknod -m console c 1 //
mknod -m null c
在Linux系统中绝大多数设备是以文件的形式存在的,这些文件放在dev(device的缩写)目录下
1.3、加入配置文件
这个配置文件已经准备好了,链接:https://pan.baidu.com/s/1dXbHIA 密码:thle
通过samba把这个文件放到Linux下,解压之后把etc文件夹下的文件全部拷贝到rootfs文件夹下的etc目录下,这里的目录要根据你在Linux目录下的设置,着下面的是我的目录
cp etc/* /root/myhome/rootfs/etc/ -rf
1.4、添加内核模块,首先要进入Linux内核目录下,我的目录是/root/myhome/linux-2.6.32.2/
编译内核,ARCH=arm是按ARM体系编译
make modules ARCH=arm CROSS_COMPILE=arm-linux- //编译完成
make modules install ARCH=arm INSTALL_MOD_PATH=/root/myhome/rootfs //编译完成后产生的文件转移到rootfs文件
1.5、编译安装busybox
为什么需要安装busybox呢?Busybox叫嵌入式开发中的瑞士军刀,我们在使用嵌入式linux的时候,根文件系统里的许多命令都需要自己来编写,比如cd、ls、cp等等,这些命令在一个开发板上可以永恒,在另一个开发板上也需要用,所以这些命令由这个Busybox来提供。
可以在商家提供的资料里面找到Busybox
将它通过samba服务器放到Linux下解压 ,进入Busybox目录下,进行配置make menuconfig
a、Busybox Settings àbuild Options->
选中 “Build busybox as a static binary”, 静态链接
Cross Compiler prefix (arm-linux-)
b、Installation Options->选中 “Don‘t use /usr”, 选中该项可以避免busybox 被安装到宿主系统的/usr目录下,破坏宿主系统
c、Busybox Installation Prefix (/xxx/rootfs)
该选项表明编译后的busybox的安装位置
配置完成后保存在直接执行make,然后在执行make install(相当于就是把产生的文件拷贝到rootfs的过程),
到此为止,所有的建立根文件系统与文件就完成了
2、挂载根文件系统
2.1挂载方式简介:根据存储设备的硬件特性、系统需求,不同的文件系统类型有不同的应用场合
initramfs启动快,作为根文件系统(也就是第一个文件系统),然后再挂载基于nandflsah的文件的文件系统
2.1、如果要用initramfs,首先要进入rootfs创建一个软链接
ln -s ./bin/busybox init
2.2、进入Linux内核,就是之前的/root/myhome/linux-2.6.32.2/这个目录,然后配置内核make menuconfig ARCH=arm
把这个选上,选上之后下面会多出一个选项,括号里就填rootfs的目录,我这里就是/root/myhome/rootfs
2.3、然后编译内核,make uImage ARCH=arm CROSS_COMPILE=arm-linux-
编译成功之后的uImage放在arch/arm/boot/目录下,把这个uImage复制到/tftpboot/目录下
2.4、环境变量的设置,进入开发板的u-boot(这个在之前u-boot新手入门里已经写好了)
setenv bootargs noinitrd console=ttySAC0,115200
saveenv
然后就下载内核
这样这个Initramfs根文件系统就挂在成功了
但是如果在开发阶段,这个文件系统可能还需要频繁地加载东西,这个时候就要在Linux上重新做根文件系统,重新编译,重新下载。因为uImage这个文件是有两部分构成的,一部分是内核另一部分是文件系统,在编译的时候压缩了这两部分文件,然后下载到开发板里面后再解压,这就是为什么需要重新做系统再编译再下载的原因。所以这个时候引入nfs基于网络的根文件系统。
3、挂载nfs根文件系统
3.1、进入内核配置,make menuconfig ARCH=arm,去掉之前挂载的Initramfs。
3.2、然后进入网络文件系统(Net filesystem)并保证Root file system on NFS被勾选
退出保存配置,然后编译内核,make uImage ARCH=arm CROSS_COMPILE=arm-linux-,再把产生的这个uImage放到/tftpboot/目录下
3.3、重新设置环境变量:
setenv bootargs noinitrd console=ttySAC0, init=/init root=/dev/nfs rw nfsroot=192.168.1.108:/root/myhome/rootfs ip=192.168.1.109:192.168.1.108:192.168.1.1:255.255.255.0::eth0:off
saveenv
这些红色字体是自己需要根据你的Linux修改的
3.4、配置Linux系统里的nfs服务器
vim /etc/exports
再往里添加部分代码
/root/myhome/rootfs *(rw,sync,no_root_squash) //保证自己的根文件系统目录是可读可写并可以访问
然后重启nfs服务器
/etc/init.d/nfs restart
3.5、然后在下载内核,出现这样的界面
紧接着在Linux的系统rootfs目录下添加两个文件,如图
这时候我们再来看之前的下载到开发板的根文件系统
果不其然,不需要重做系统、重新编译、重新下载,也多出了两个文件,这就是nfs网络文件系统的好处!
这是因为这个根文件系统是通过网络挂载到这个开发板的,文件是通过网络下载到开发板的,这在后续的开发非常有用!
基于mini2440嵌入式Linux根文件系统制作(Initramfs和nfs两种跟文件系统)的更多相关文章
- 基于s5pv210嵌入式linux系统sqlite3数据库移植
基于s5pv210嵌入式linux系统sqlite3数据库移植 1.下载源码 http://www.sqlite.org/download.html 最新源码为3080100 2.解压 tar xvf ...
- 基于busybox的Linux小系统制作 (initrd)
我们有时候有需要在busybox基础上,制作linux,可是却不知道具体怎么做,这里将对基于busybox的linux小系统制作做出详细的步骤说明.准备环境:1.一个Redhat完整系统的虚拟机,本次 ...
- Linux下查看alert日志文件的两种方法
--linux下查看alert日志文件的两种方法: --方法1: SQL> show parameter background_dump_dest; NAME TYPE VALUE ------ ...
- Linux下实现秒级定时任务的两种方案
Linux下实现秒级定时任务的两种方案(Crontab 每秒运行): 第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间. while true ;do command s ...
- linux系统的磁盘空间限制的两种方法
最近在搞VPS,要用到磁盘的限额,在网上找了一些相关的资料,总结起来,有两个方法能实现,一是用quota,另外一种是限制目录大小,下面我就将这两种方法写出来,与大家一起分享! 首先我们来看第一种方法, ...
- [ARM-Linux开发]Linux下加载.ko驱动模块的两种方法:insmod与modprobe
假设要加载的驱动程序模块名为SHT21.ko 加载驱动模块 方法一: 进入SHT21.ko驱动模块文件所在的目录,然后直接 insmod SHT21.ko 即可 方法二: 将SHT21.ko文 ...
- 基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)
今天我们来盘一盘Socket通讯和WebSocket协议在即时通讯的小应用——聊天. 理论大家估计都知道得差不多了,小编也通过查阅各种资料对理论知识进行了充电,发现好多demo似懂非懂,拷贝回来又运行 ...
- 制作Docker镜像的两种方式
此文已由作者朱笑天授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.使用docker commit命令制作docker镜像 1. pull一个centos6.6的基础镜像, ...
- Hyper-V 下linux虚拟机静态IP上网配置的两种方式(2)
工作需要,搭建linux环境,网上搜了两种Hyper-V配置linux静态IP及上网的方式,记录一下,方便查阅,如下设置网络共享方式: win10下使用hyper-v在本机安装linux虚拟机后,网络 ...
随机推荐
- php文件夹上传下载控件分享
用过浏览器的开发人员都对大文件上传与下载比较困扰,之前遇到了一个php文件夹上传下载的问题,无奈之下自己开发了一套文件上传控件,在这里分享一下.希望能对你有所帮助. 以下是实例的部分脚本文件 这里我先 ...
- Bloomber 新建基金账户步骤
--Bloomber 新建基金账户步骤0.执行FIRM命令1.新建account group2.新建account3.将account加入到account group4.将account group授 ...
- JS进阶学习<一>
一:区分大小写: 1. JS是区分大小写的,如:classname和ClassName是不一样的.同时注意方法.属性.变量等的大小写吆. 2. JS中的字符.符号等一定要在英文状态下输入吆. 二:变量 ...
- 【MFC】BitBlt详解
设备上下文绘图有很多种方法.例如通过创建位图画刷,利用其填充一个区域来实现图像的绘制.此外,还可以使用CDC类的位图函数来输出位图到设备上下文中. BitBlt 用于从原设备中复制位图到目标设备,语法 ...
- VS快捷键操作
1.窗口快捷键记忆诀窍: 凡跟窗口挂上钩的快捷键必有一个W(Windows):Ctrl+W,W: 浏览器窗口 (浏览橱窗用有道的翻译是window shopping) Ctrl+W,S: 解决方案管理 ...
- WINDOWS mysql 5.7.15 安装配置方法图文教程
因本人需要需要安装Mysql,现将安装过程记录如下,在自己记录的同时,希望对有疑问的人有所帮助. 一.下载软件 1. 进入mysql官网,登陆自己的oracle账号(没有账号的自己注册一个),下载My ...
- Asp.NetCore应用--部署到 ubuntu 进行托管
准备过程 netcore linux发布包(本人是通过vs2017发布) ubuntu 16.0.4虚机 进行托管 ubuntu netcore发布文件路径 服务器设置为将对 http://< ...
- 面试40-一个数组,有2个数字出现奇数次,其余都是偶数次,求这两个数字O(n) O(1)
#include<iostream> using namespace std; // 题目:数组中只有不多于两个数字出现次数是奇数次,其他都是偶数次,求出出现奇数次的数字(不含0的数组) ...
- NOIP2012 D2T3 疫情控制 题解
题面 这道题由于问最大值最小,所以很容易想到二分,但怎么验证并且如何实现是这道题的难点: 首先我们考虑,对于一个军队,尽可能的往根节点走(但一定不到)是最优的: 判断一个军队最远走到哪可以树上倍增来实 ...
- [Codeforces 266E]More Queries to Array...(线段树+二项式定理)
[Codeforces 266E]More Queries to Array...(线段树+二项式定理) 题面 维护一个长度为\(n\)的序列\(a\),\(m\)个操作 区间赋值为\(x\) 查询\ ...