使用Busybox构造cramfs根文件系统

使用Busybox构造cramfs根文件系统

11.1、下载Busybox,如果系统中没有mkcramfs工具则还要下载mkcramfs压缩工具。本文件系统使用Busybox-1.10.1cramfs-1.1。压缩文件Busybox-1.10.1.tar.bz2cramfs-1.1.tar.gz

22.解压文件:

tar jxvf Busybox-1.10.1.tar.bz2

tar zxvf cramfs-1.1.tar.gz

2、进入解包之后生成cramfs-1.1目录,执行编译命令:

make

编译完成之后,会生成mkcramfscramfsck两个工具,其中mkcramfs工具是用来创建cramfs文件系统的,而cramfsck工具则用来进行cramfs文件系统的释放以及检查。如果该目录下已有这两个可执行程序,则无需编译,直接使用。

3.修改Makefile文件

ARM板为例,打开Makefile文件,找到ARCH?=CROSS_COMPILE?=两项,修改为

ARCH ?= arm

CROSS_COMPILE ?=arm-linux- //arm-linux-为交叉编译器在环境变量中的目录前缀,视自己交叉编译环境而定

4.进入解压后的Busybox-1.10.1目录,运行make menuconfigmake gconfig进行配置

在进行配置时有几项需要注意:

ØBuild Options>

Build BusyBox as a static binary (no shared libs)

Force NOMMU build

Build shared libbusybox

Build with Large File Support (for accessing file>2GB)

如果选择 Build BusyBox as a static binary (no shared libs)方式进行编译时,所需的库已经与程序静态地链接在一起,这些程序不需要额外的库就可以单独运行,但是自己编写的程序在文件系统上运行必须采用静态编译,否则会报诸如:bin/sh: hello :not found的错误。

静态编译如:

arm-linux-gcc–static hello.c –o hello

 如果选择Build shared libbusybox方式进行编译时,要将交叉编译的动态库或符号链接复制到对应的目录中,否则程序不能运行。同时在配置时应去掉Build shared libbusybox目录下的两项:如下 

Build shared libbusybox>

 Producebinary for each applet,linked against libbusybox

Produceadditional busybox binary linked against libbusybox

同时去掉

Build with Large File Support (for accessing file>2GB)

否则编译会报错。

Ø一定要勾选上如下配置:

Init Utilities>

(*) init

(*) Supporting reading an inittab file//支技init进程读取/etc/inittab配置文件。

(*) Supporting running commands with controlling-tty//使busybox在真实的串口设备中运行命令行,不使用可能会报类似与:shcan’t access ttyjob control turned off的错误。

其它基本可按默认配置。

5.执行

make

编译完成后执行

make install

 则在Busybox-1.10.1目录下有_install这个目录,这正是我们想要的。

66. _install目录下已经有三个包含应用程序的目录:binsbinusr和脚本linuxrc,注意此linuxrc不要随便换掉,就用此linuxrc

在此_install目录下创建其它几个需要的目录,如下

mkdir etc dev proc tmp lib var sys

7.转到dev目录下创建设备节点

mknod ram0 b 1 0

mknod-m 660 console c 51

mknod-m 660 null c 1 3

mknod-m 660 zero c 1 3

mknod-m 666 ttySAC0 c 204 64

8.编写脚本,这一点很重要,没写好或脚本有错误,文件系统都起不来。

转到etc目录,编写inittab脚本,内容如下:

# Startup the system

null::sysinit: /bin/mount –o remount,rw/

null::sysinit: /bin/mount –t procproc /proc

null::sysinit: /bin/mount –a

console::sysinit: /etc/init.d/rcS

ttySAC0::respawn: /bin/sh

9.编写挂载表fstab

proc/proc proc defaults 0 0

sysfs/sys sysfs defaults 0 0

none/dev/pts devpts mod=0622 0 0

tmpfs/dev/shm tmpfs defaults 0 0

10.etc下创建目录init.d

cd init.d

创建脚本rcS

内容如下:

# /bin/sh

保存,并修改rcS的权限,否则会出现Cannot run ‘/etc/init.d/rcS’:Permission denied的错误:

chmod775 rcS

1111.生成文件系统映像。

11、./mkcramfs _install rootfs.cramfs

至此,文件系统制作完毕。

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

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

相关文章

关于二维码分块上色(彩色二维码)的算法研究

原文:关于二维码分块上色(彩色二维码)的算法研究众所周知,二维码通常是黑白的,而且是由若干个长方形或正方形小块平铺而成。但从人们的审美角度来看,常见的黑白二维码不免让人审美疲劳。本文试着从分块上色的角度对二维…

20145309信息安全系统设计基础第12周学习总结后篇

指针与声明 声明 1、C语言中变量的声明 类型(type) 声明符(declarator) 2、最简单的声明是变量 3、指针数组 指针数组是一个数组数组里的元素都是指针例:int *daytab[13]4、数组指针 数组指针是一个指针指针指向一个类…

跨时钟域电路设计——多bit信号FIFO

多个bit信号的跨时钟域仅仅通过简单的同步器同步时不安全的。 如下图: 虽然信号都同步到目的时钟域,可完成的功能却与设计的初衷不相符。 解决方案之一为对信号进行格雷码编码,但此方案只适用于连续变化的信号。另一种方案为增加新的控制信号…

嵌入式linux系统中设备驱动程序

嵌入式linux系统中设备驱动程序是内核的一部分,完成对设备初始、读写操作和控制等功能。驱动程序隐藏了硬件设备的具体细节,对不同的设备提供一致的接口,这些接口通过file_Operation结构来定义,设计驱动程序的大部分工作就是根据硬…

WPF 打印实例

原文:WPF 打印实例在WPF 中可以通过PrintDialog 类方便的实现应用程序打印功能&#xff0c;本文将使用一个简单实例进行演示。首先在VS中编辑一个图形&#xff08;如下图所示&#xff09;。 将需要打印的内容放入同一个<Canvas>中&#xff0c;并起名为“printArea”&…

mongodb 物理删除数据

刚开始用mongodb的时候&#xff0c;感觉很好用&#xff0c;速度很快&#xff0c;不过后面就遇到一个问题&#xff0c;数据物理内存一直增加&#xff0c;删除表也不管用。 然后网上找了各种办法&#xff0c;最后发现一个办法管用&#xff0c;就是物理删除存储数据。 操作如下&am…

计数排序、桶排序和基数排序

计数排序 当输入的元素是 n 个 0 到 k 之间的整数时&#xff0c;它的运行时间是 Θ(n k)。计数排序不是比较排序&#xff0c;排序的速度快于任何比较排序算法。 由于用来计数的数组C的长度取决于待排序数组中数据的范围&#xff08;等于待排序数组的最大值与最小值的差加上1&a…

静态时序分析——基础概念

一、简述 静态时序分析是检查系统时序是否满足要求的主要手段。以往时序的验证依赖于仿真&#xff0c;采用仿真的方法&#xff0c;覆盖率跟所施加的激励有关&#xff0c;有些时序违例会被忽略。此外&#xff0c;仿真方法效率非常的低&#xff0c;会大大延长产品的开发周期。静…

linux framebuffer 例子

昨天做的一个极简单的framebuffer的例子&#xff0c;用来学习怎样操作fb设备。 这段代码是在picogl的vesafb backend部分的基础上简出来的&#xff0c;所以变量名还保留着。 流程如下&#xff1a; &#xff11; 打开framebuffer设备&#xff1b; &#xff12; 通过ioctl取得f…

加载数据时,页面显示正在加载的动画,支持移动端

最近在使用ionic3做一个移动端APP&#xff0c;在用户网络环境差的时候&#xff0c;查询数据会比较慢&#xff0c;这个时候需要模拟其他成熟的APP给页面上加入一个加载的动画。由于一开始我不知道ionic3本身已经提供了一套组件&#xff0c;所以自己先做了一套样式。提供给不用框…

静态时序分析——单周期

一、建立时间的检查 建立时间的检查是指检查电路里每一个触发器的数据和时钟的关系是否满足建立时间的要求。 我们以上图为例进行建立时间检查。由图可知&#xff0c;我们主要针对第二个触发器UFF1进行检查。我们可以梳理时序关系如下&#xff1a; 通过这个图&#xff0c;我们…

自己搭建的CISCO实验环境

交换机&#xff1a;设备型号&#xff1a; CISCO 3750 24-TS 3台CISCO 3750 48-PS 1台路由器&#xff1a;设备型号&#xff1a;1.CISCO 2821 3台2.CISCO 3745 3台 物理拓扑图如下&#xff1a; 转载于:https://blog.51cto.com/zxs3026/2156424

关于大数定律的讨论(转)

科普一下所谓“大数定律的四种证法” 作者 : 王若度最近网上总是调侃数学、统计博士知道所谓“大数定律的四种证法”&#xff0c;本身是模仿《孔乙己》的桥段&#xff0c;用以调侃数学、统计博士学一些没什么用的东西。其实我是从来没听说过大数定律的四种证法这回事的&#x…

DM365 u-boot 启动分析

第一阶段&#xff1a;汇编语言启动 先看u-boot/board/davinci/dm365_ipnc/下的文件。 u-boot.lds OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS { . 0x0000000…

[Luogu1821][USACO07FEB]银牛派对Silver Cow Party

由题意可知&#xff0c;我们需要求的是很多个点到同一个店的最短距离&#xff0c;然后再求同一个点到很多个点的最短距离。 对于后者我们很好解决&#xff0c;就是很经典的单源最短路径&#xff0c;跑一边dijkstra或者SPFA即可。 然而对于前者&#xff0c;我们应该怎么解决呢&a…

CMOS组合逻辑

1. 静态互补CMOS 实际上就是静态CMOS反相器扩展为具有多个输入。更反相器一样具有良好的稳定性&#xff0c;性能和功耗。 静态的概念&#xff1a;每一时刻每个门的输出通过低阻抗路径连到VDD或VSS上。任何时候输出即为布尔函数值。动态电路通常依赖把信号暂存在高阻抗节点的电…

绘制泰森多边形

使用到的数据文件&#xff0c;内容如图&#xff1a; 代码&#xff1a; clc; clear; close all; % 导入需要的坐标数据成矩阵 a load(test.txt); x a(:,1); y a(:,2); x x;%获取坐标的横坐标 y y;%获取坐标的纵坐标 %根据点 绘制泰森多边形 voronoi(x,y); %设定x轴的边界 x…

(八)限定某个目录禁止解析php、限制user_agent和PHP相关配置

2019独角兽企业重金招聘Python工程师标准>>> 限定某个目录禁止解析php 对于使用php语言编写的网站&#xff0c;有一些目录是有需求上传文件的。如果网站代码有漏洞&#xff0c;让黑客上传了一个用PHP写的木马&#xff0c;由于网站可以执行PHP程序&#xff0c;最终会…

静态时序分析——多周期、半周期和伪路径

一、多周期 multicycle paths 在一些情况下&#xff0c;如下图所示&#xff0c;两个寄存器之间的组合电路传输的逻辑延时超过一个时钟周期。在这样的情况下&#xff0c;这个组合路径被定义为多周期路径&#xff08;multicycle path&#xff09;。尽管后一个寄存器会在每一个的…

微信头像单张图片上传

后台配置 public function upload_img($img){import(ORG.Tencent.Weixin);$wx new Weixin(get_app_config());$media_data$wx->getMedia($img);$path./Uploads/.uniqid()..jpg;if(!file_put_contents($path,$media_data)){$this->error(图片上传失败);}return $path;}前…