生成initramfs_windows引导文件

生成initramfs_windows引导文件在制作Initramfs文件系统之前,我先简单介绍下linux各文件系统。linux支持多种文件系统类型,包括ext2,ext3,vfat,jffs,ramfs,nfs等,为了对各类文件系统进行统一管理,linux引入了虚拟文件系统vfs(virtualfilesystem),为各类文件系统提供一个统一的应用编程接口。文件系统类型主要有如下:根据存储设备的硬件特性,…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

    在制作Initramfs文件系统之前,我先简单介绍下linux各文件系统。linux支持多种文件系统类型,包括ext2,ext3,vfat,jffs,

ramfs,nfs等,为了对各类文件系统进行统一管理,linux引入了虚拟文件系统vfs(virtual file system),为各类文件系统提供一个统一的应用编程接口。

文件系统类型主要有如下:

    根据存储设备的硬件特性,系统需求,不同的文件系统类型有不同的应用场合。在嵌入式linux应用中,主要的存储设备为ram和flash,常用的基于存储设备的文件系统类型包括:jffs2,yaffs,cramfs,ramdisk,ramfs等。

基于flash的文件系统

    Flash(闪存)作为嵌入式系统的主要存储媒介,主要有nor和nand两种技术。flash存储器的擦写次数是有限的,nand闪存还有特殊的硬件接口和读写时序。因此,必须针对flash的硬件特性设计符合应用要求的文件系统。

jffs2:主要用于nor型flash,特点是可读写,支持数据压缩的日志型文件系统。

yaffs/yaffs2:主要用于nand型flash,支持跨平台。

cramfs:只读的压缩文件系统。可用于两种flash。

ramdisk:基于ram的文件系统。是将一部分固定大小的内存当做块设备来用。它并非是一个实际的文件系统,而是一种将实际的文件系统装入内存的机制。将一些经常访问而又无需更改的文件通过ramdisk放在内存中,可以明显的提高系统的性能。

initramfs:基于ram的文件系统。initramfs出现在2.6内核中,它类似于tmpfs,是一种基于内存的文件系统,它的使用不需要创建内存块设备。增加文件到ramfs会自动配置更多的内存,并删除或截去文件以释放内存。(若ramdisk没有满,已被占用的额外的内存也不能用来做其它事情,若ramdisk满了,但其它仍有闲置的内存,也必须重新格式化以后才能扩展使用)

nfs:是由sun开发的一种在不同机器之间通过网络共享文件的技术。在嵌入式linux系统的开发调试阶段,可以利用该技术在主机上建立基于nfs的根文件系统,挂载到嵌入式设备,可以很方便的修改根文件系统的内容。

     Initramfs文件系统其实就是压缩的ramdisk文件系统,估计大家很少又听说过的,我也一样,但是我这次调试板子的时候用的NFS文件系统,发现固化文件系统时,没有什么好选择的,u-boot不能直接支持yaffs2,需添加补丁;ramdisk不能直接固化到flash上,jffs2和cramfs都需要其他工具制作,最后找到了Initramfs文件系统。Inittamfs是将ramdisk文件文件系统被编译到内核中,其实就是ramdisk文件系统(Inital ramdisk filesystem)。在制作initramfs文件系统时,我们首先需要制作ramdisk文件系统,这个挺简单的,资料也挺齐全的,我这里简单介绍下:

1、创建根文件系统的目录

  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

2、创建设备文件

  cd /dev

  mknod -m 666 console c 5 1

  mknod -m 666 null    c 3 1

  cd ..

3、安装/etc

   tar etc.tar.gz -c /xxx/rootfs

   这步我就不提供资源了,我也是在国嵌上找到找到的,感兴趣的自己可以找找看,里面东西堵都不是很难。

4、编译内核模块

    进入Linux内核目录(linux-2.6.30.4)

    make modules   注意:最好将内核根目录下的Makefile文件中的ARCH改成arm CROSS-COMPILE改成arm-linux-,因为很多地方会用到这些两个环境变量,同时在宿主机上编译驱动程序时,如果没有修改这两个变量,会报奇怪的错误:http://blog.csdn.net/pengrui18/article/details/12044369

5、安装内核模块

   make modules_install INSTALL_MOD_PATH=/xxx/rootfs

6、配置busybox

   进入busybox目录执行make menuconfig

   a、进入Busybox Setting->

        build options->

           []”Build busybox as a static binary”//动态链接

           Cross Compile prefix(arm-linux-)

        Installation Option->

           [*]Don’t usr/usr//避免busybox安装至宿主系统的usr,目录下

           Busybox Installation Prefix(/xxx/rootfs)//安装位置

       其他选项默认

7、编译、安装busybox

    make

    make install

基本上按照上面的步骤就可以完成文件系统的制作,下面贡献下我个人一直觉得不多的一个文件系统模板:http://download.csdn.net/detail/pengrui18/6513401

还需补充几点:

1、使用动态编译busybox时,如果交叉编译工具的版本信息为4.0以上,需要在内核中将以下选中(否则会包kernel panic错误,以前一直以为是少了库文件):

   Kernel Features  —>
            [*] Use the ARM EABI to compile the kernel                   
            [*]   Allow old ABI binaries to run with this kernel (EXPERIMENTA)

2、需要将交叉编译工具下的lib目录下的库文件拷贝过去,最好全部拷贝,毕竟以后程序运行还有可能用到

 

接下来开始制作Initramfs文件系统:

1、建立Initramfs文件系统启动时所需文件init(initramfs文件系统启动时会在根文件系统中执行第一个init程序,它对uboot传过来的参数init=/linuxrc不予理睬,所以需要在制作的根文件系统里的根目录加入init程序,否则无法启动。init程序和linuxrc程序一样都是符号链接文件,它们都是指向/bin/busybox程序。)

   cd rootfs

   mv linuxrc init

2、添加内核对Initramfs文件系统支持

   make menuconfig

   General setup  —>

         [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
         (/xxx/rootfs) Initramfs source file(s)    #输入根文件系统的所在目录 

3、修改u-boot的启动参数

     printenv

     setenv bootcmd nand read 30008000 100000 500000;bootm 30008000//启动500000为内核镜像文件大小

以上就是我制作Initramfs文件系统的过程,如有问题或者错误,请留言。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169680.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • opkg 更新软件[通俗易懂]

    opkg 更新软件[通俗易懂]opkg不同的版本存在不同的配置文件,一般常用的是/etc/opkg.conf、/etc/opkg/customfeeds.conf和/etc/opkg/distfeeds.conf三个。这三个配置文件将会影响opkg运行时软件资源的取向,opkg软件源定义在/etc/opkg/distfeeds.conf(更新/etc/opkg.conf并没有作用)文件中,包含软件源索引的目录路径。下…

    2022年6月13日
    102
  • php jquery教程下载,jquery 怎么下载

    php jquery教程下载,jquery 怎么下载下载jquery的方法:首先使用百度搜索“jQuery”;然后点击进入jQuery网站;最后找到适合开发的版本后进行下载即可。本教程操作环境:windows7系统、jquery3.2.1版,该方法适用于所有品牌电脑。下载jquery的方法:首先,打开您的浏览器,无论是什么浏览器都可以,只要可以连接上网络就行。使用百度搜索“jQuery”.您可以选择下图所示量项中的一项,并点击进入jQuery网站。…

    2022年5月4日
    28
  • CreateThread()与_beginthread()的区别详细解析

    很多开发者不清楚这两者之间的关系,他们随意选一个函数来用,发现也没有什么大问题,于是就忙于解决更为紧迫的任务去了。等到有一天忽然发现一个程序运行时间很长的时候会有细微的内存泄露,开发者绝对不会想到是因为这两套函数用混的结果我们知道在Windows下创建一个线程的方法有两种,一种就是调用WindowsAPICreateThread()来创建线程;另外一种就是调用MSVC…

    2022年4月4日
    58
  • Android数据库加密

    Android数据库加密Android数据库加密一、简介SQLite是一个轻量的、跨平台的、开源的数据库引擎,它的读写效率、资源消耗总量、延迟时间和整体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方案(如Android、iOS)。Android系统内置了SQLite数据库,并且提供了一整套的API用于对数据库进行增删改查操作,具体就不详细说明了。然而,Android平台自带的SQLite有一个致命的缺陷:…

    2022年5月13日
    44
  • linux dp接口显示,什么是DP接口?DP接口有哪些用处?

    原标题:什么是DP接口?DP接口有哪些用处?DisplayPort(简称DP)是一个由PC及芯片制造商联盟开发,视频电子标准协会标准化的数字式视频接口标准。它是第一个依赖数据包化数据传输技术的显示通信端口。DP接口主要用于视频源与显示器等设备的连接,并也支持携带音频、USB和其他形式的数据。DP接口常见设备有笔记本电脑、显示器、家庭影院等。DP接口可以简单理解成HDMI的加强版,在音频和视频传输…

    2022年4月9日
    96
  • Binwalk工具的详细使用说明

    https://blog.csdn.net/QQ1084283172/article/details/66971242一、binwalk工具的基本用法介绍1.获取帮助信息$binwalk-h#或者$binwalk–help2.固件分析扫描$binwalkfirmware.bin#或者$binwalkfirmware.bin|hea…

    2022年4月4日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号