【原创】linux内核移植过程--ramdisk的制作

2024-03-11 13:58

本文主要是介绍【原创】linux内核移植过程--ramdisk的制作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#####为了方便阅读,将把ramdisk的作用放在文章后面。

我使用的是TI公司am335x;

前面缺省文件系统的制作,可以见网上blog,使用busybox制作。

这里提供我实验过的文件系统链接(使用此文件可直接从第三步进行):http://download.csdn.net/detail/taiyi2012/6850773

#####以下均在ubuntu10.04

1.目的:产生ramdisk文件(”ramdisk“可用其他名字代替)

             操作:genext2fs   -b  8192   -d  /XXX/rootfs  ramdisk

    (MARK:genext2fs   -b  8192   -D  device_table.txt  -d  /XXX/rootfs  ramdisk

             /*  XXX 为rootfs的绝对路径,下同 */

2.目的:产生ramdisk.gz  (在ramdisk所在目录进行)

             操作:gzip  -f9   ramdisk

             结果:在当前目录下产生一个ramdisk.gz文件(14M左右)

3.目的:对内核压缩(在zImage所在目录进行)

             操作:gzip -c9 zImage  >   zImage.gz

4.目的:产生最终文件(工作目录下需要有文件zImage.gz 与 ramdisk.gz)

             操作:mkimage  -A  arm  -O  linux  -T  multi  -C  gzip   -a   0x80008000  -e  0x80008000  -n  "yourname"  -d  zImage.gz:ramdisk.gz  Ramdisk

5.最后将Ramdisk文件拷贝到/tftpboot(如果前面是在/tftpboot 进行,忽略此步)


#####以下已进入u-boot

6.进入uboot:

            u-boot#

我的默认环境为:console=ttyO0,57600n8 rw mem=128M root=/dev/ram

解释:mem=128M:内存大小

也可以通过命令setenv bootargs 命令来改变环境如:

          u-boot#setenv bootargs root=/dev/ram rw  console=ttyO0,57600n8 mem=128M


7.目的:烧写Ramdisk

           操作:u-boot# tftp 0x82000000 Ramdisk

8.目的:启动内核

           操作:u-boot# bootm

          或者:u-boot#bootm 0x82000000

到这里就能正常进入内核了。

那为什么要有ramdisk这一步呢?为什么直接把编译好的uImage烧写到板子上启动不了呢?解释如下:(下文摘抄于其他blog)

【待完善】

RAMDISK简介:

Linux 中,rootfs 是必不可少的。PC 上主要实现有ramdisk和直接挂载 HDHarddisk,硬盘)上的根文件系统;嵌入式中一般不从 HD 启动,而是从 Flash 启动,最简单的方法是将 rootfs load 到 RAM 的 RAMDisk,稍复杂的就是直接从Flash 读取的Cramfs,更复杂的是在Flash 上分区,并构建JFFS2等文件系统。
        Ramdisk 是将一部分固定大小的内存( RAM )空间模拟出硬盘分区。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。将一些经常被访问而又不会更改的文件 ( 如只读的根文件系统 ) 通过 Ramdisk放在内存中,可以明显地提高系统的性能。
        在 linux 系统中 ,ramdisk 有二种 , 一种就是可以格式化并加载 , linux内核2.0/2.2就已经支持,其不足之处是大小固定;另一种是 2.4的内核才支持,通过,ramfs来实现,他不能被格式化,但用起来方便,其大小随所需要的空间增加或减少,是目前linux常用的ramdisk技 术.
        initrd  是  RAMDisk  的格式, kernel 2.4  之前都是  image-initrd Kernel 2.5  引入了  cpio-initrd ,大大简化了 Linux  的启动过程,附合  Linux  的基本哲学: Keep it simple, stupid(KISS). 不过cpio-initrd 作为新的格式,还没有经过广泛测试,嵌入式 Linux 中主要采用的还是 image-initrd
        在嵌入式环境中,我们将使用 RAMDisk 制作好的 rootfs  压缩后写入 Flash ,启动的时候由 Bootloader  装载到 RAM 中。在 Linux 的启动阶段, initrd 提供了一套机制,可以将内映像和根文件系统一起载入内存并解压缩,然后挂载到 下。这种方法操作简单,但是在 RAM 中的文件系统不是压缩的,因此需要占用许多嵌入式系统中稀有资源 RAM

        由于/目录实在内存中,所以我们对根文件系统进行的操作并不会保存到Flash上,而是在RAM中。这样也就意味着,对根文件系统所作的修改,掉电后将会丢失.


 Initrd
Initrd是在Linux中普遍采用的一种技术,就是由Bootloader加载的内存盘。在系统启动的过程中,首先会执行Initrd中的“某一个文件”来完成驱动模块加载的任务,第二阶段才会执行真正的根文件系统中的/sbin/init。这里提到的第一阶段是为第二阶段服务的,主要是用来加载根文件系统以及根文件系统存储介质的驱动程序。

资料中提到,存在多种类型的Initrd,实际应用中包括无Initrd、Linux Kernel和Initrd打包、Linux Kernel和Initrd分离以及RAMDisk Initrd。

目前,手中项目采用的就是第四种策略。在系统启动的时候,U-Boot会将Linux Kernel和Rootfs加载到内存,并跳转到Linux Kernel的入口地址执行程序。这篇文章将侧重对该种情况进行分析。












            

 

这篇关于【原创】linux内核移植过程--ramdisk的制作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/797993

相关文章

Linux镜像文件制作方式

《Linux镜像文件制作方式》本文介绍了Linux镜像文件制作的过程,包括确定磁盘空间布局、制作空白镜像文件、分区与格式化、复制引导分区和其他分区... 目录1.确定磁盘空间布局2.制作空白镜像文件3.分区与格式化1) 分区2) 格式化4.复制引导分区5.复制其它分区1) 挂载2) 复制bootfs分区3)

JAVA SpringBoot集成Jasypt进行加密、解密的详细过程

《JAVASpringBoot集成Jasypt进行加密、解密的详细过程》文章详细介绍了如何在SpringBoot项目中集成Jasypt进行加密和解密,包括Jasypt简介、如何添加依赖、配置加密密钥... 目录Java (SpringBoot) 集成 Jasypt 进行加密、解密 - 详细教程一、Jasyp

Java通过ServerSocket与Socket实现通信过程

《Java通过ServerSocket与Socket实现通信过程》本文介绍了Java中的ServerSocket和Socket类,详细讲解了它们的构造方法和使用场景,并通过一个简单的通信示例展示了如何... 目录1 ServerSocket2 Socket3 服务器端4 客户端5 运行结果6 设置超时总结1

Linux服务器数据盘移除并重新挂载的全过程

《Linux服务器数据盘移除并重新挂载的全过程》:本文主要介绍在Linux服务器上移除并重新挂载数据盘的整个过程,分为三大步:卸载文件系统、分离磁盘和重新挂载,每一步都有详细的步骤和注意事项,确保... 目录引言第一步:卸载文件系统第二步:分离磁盘第三步:重新挂载引言在 linux 服务器上移除并重新挂p

Linux下屏幕亮度的调节方式

《Linux下屏幕亮度的调节方式》文章介绍了Linux下屏幕亮度调节的几种方法,包括图形界面、手动调节(使用ACPI内核模块)和外接显示屏调节,以及自动调节软件(CaliseRedshift和Reds... 目录1 概述2 手动调节http://www.chinasem.cn2.1 手动屏幕调节2.2 外接显

Linux(centos7)虚拟机没有IP问题及解决方案

《Linux(centos7)虚拟机没有IP问题及解决方案》文章介绍了在CentOS7中配置虚拟机网络并使用Xshell连接虚拟机的步骤,首先,检查并配置网卡ens33的ONBOOT属性为yes,然后... 目录输入查看ZFhrxIP命令:ip addr查看,没有虚拟机IP修改ens33配置文件重启网络Xh

linux实现对.jar文件的配置文件进行修改

《linux实现对.jar文件的配置文件进行修改》文章讲述了如何使用Linux系统修改.jar文件的配置文件,包括进入文件夹、编辑文件、保存并退出编辑器,以及重新启动项目... 目录linux对.jar文件的配置文件进行修改第一步第二步 第三步第四步总结linux对.jar文件的配置文件进行修改第一步进

MongoDB搭建过程及单机版部署方法

《MongoDB搭建过程及单机版部署方法》MongoDB是一个灵活、高性能的NoSQL数据库,特别适合快速开发和大规模分布式系统,本文给大家介绍MongoDB搭建过程及单机版部署方法,感兴趣的朋友跟随... 目录前言1️⃣ 核心特点1、文档存储2、无模式(Schema-less)3、高性能4、水平扩展(Sh

MySQL中存储过程(procedure)的使用及说明

《MySQL中存储过程(procedure)的使用及说明》存储过程是预先定义的SQL语句集合,可在数据库中重复调用,它们提供事务性、高效性和安全性,MySQL和Java中均可创建和调用存储过程,示例展... 目录概念示例1示例2总结概念存储过程:在数据库中预先定义好一组SQL语句,可以被程序反复调用。

MySQL存储过程实践(in、out、inout)

《MySQL存储过程实践(in、out、inout)》文章介绍了数据库中的存储过程,包括其定义、优缺点、性能调校与撰写,以及创建和调用方法,还详细说明了存储过程的参数类型,包括IN、OUT和INOUT... 目录简述存储过程存储过程的优缺点优点缺点存储过程的创建和调用mysql 存储过程中的关键语法案例存储