什么是 linux 内核的移植,移植Linux内核-映像文件

7338706_2.png

在Vendor/Product Selection窗

口中,请确认Analog

Device被设置为Vendor(如上图所示)。这里,我们选择一块BF533-STAMP的验证板作为编译目标。(我们仅仅是为了演示整个编译过程,

在下面的文章里将介绍如何添加自己的板子作为编译目标)在你选择一块验证板作为编译目标时,系统默认会根据该目标板的配置文件加载一些默认设置。

选择返回“Main Menu”界面。一个对话框会出现提示“是否新的内核设置”,选择“Yes”。

选择“Kernel/Library/Defaults Selection”选项。出现“Kernel/Library/Defaults Selection”窗口。

7338706_3.png

选中“Customize Kernel Setting”和“Customize Vendor/User Settings”选项。选择的方法是在选择该条目的情况下按”Y”键。

选择返回主界面。选择Exit退出并保存设置。终端界面在执行一长串命令后,显示“Linux Kernel Configuration”界面。

7338706_4.png

内核设置窗口中你可以进行各种内核选项和设备驱动设置。如果这是你第一次编译内核,在你不知道这些选项的确切意义之前,强烈建议你不要修改任何选项(因为

我们练习的目的是熟练内核编译的流程,使用默认的选项就可以。)在下面的文章中你将学习如何设置内核使其适合特定的目标板。

选择退出设置。一个对话框会出现提示“是否新的内核设置”,选择“Yes”。

7338706_5.png

终端执行一些命令后,出现“uClinux v3.2.0

Configuration”窗口。在这个窗口中,你可以设置各种应用程序(它们可能是ADI预先demo程序,用来演示uClinux上的一些特定应

用,如音频、视频播放器等)。如果这是你第一次编译内核,还是建议保持缺省设置,不要做任何修改。

选择退出并保存设置。一个对话框会出现提示“是否新的内核设置”,选择“Yes”。

提示:有些程序是实验性的,可能通不过编译或者导致不稳定。

设置工作至此结束。运行下列命令开始编译。编译过程中将更新内核及根文件系统。编译将耗时5至10min,所需时间可能根据你选择组件的数量略有增加或缩短。如果在虚拟机中运行交叉编译器时间将成倍增长。

7338706_6.png

编译成功后会在images子目录下生成一大批可通过U-Boot加载至目标板的内核文件。这些内核映像文件将在下文中作详细讨论。关于U-Boot的详细信息请参考前几章节。

在你完成对一些应用程序的裁剪后,通常输入make命令对系统进行编译。如果一切顺利,在几分钟的等待后,编译后的文件将存放在一个称作

images的子目录中(它位于uClinux源码根目录下)。使用cd命令切换至该目录,并用ls命令列出其中包含的文件。你会得到如下图所示的一批文

件。那些不同的文件有什么明确的用途吗?

7338706_7.png

总的说来,这些文件可以分成两大类:内核文件 和 根文件系统

注意以下操作适用于所有ADI的验证板。你的板子的设置可以与上面的生成的文件不同,你可以按照自己的喜好配置需要生成什么,不需要生成什么以及生成文件

保存的路径。具体的映像(image)生成过程在make文件vendors//

/Makefile中描述。举例,我们上文使用BF533-STAMP的验证板作为编译目标,它的编译设置在vendors/AnalogDevices/BF533-EZKIT/Makefile中描述。

而为了避免重复设置,那个映像(image)目标可能指向vendors/AnalogDevices/vendor.mak中定义的目标。如果你希望自

己的板子像上面那样结构生成image文件,你可以在不通过拷贝设置文件情况下重新使用那些设置。可以参考vendors/Bluetechnix

/CM-BF537U/Makefile作为重写使用Analog Device验证板设置的例子。

内核映像:

内核映像有很多种。它可以是ELF格式,或者是可引导的U-Boot映像格式。它可以和一个根文件系统捆绑在一起。或者仅仅是内核本身。

格式:

内核如果是可引导的U-Boot格式,它一般地会在文件名中包含Image字符串(诸如uImage或vmImage),而ELF格式的内核通常在文件名中包含linux字符串(诸如linux或vmlinux)。

多数情况下你应该使用U-Boot格式的可引导内核映像。U-Boot格式包括压缩过程,这使得内核文件体积更小,同时U-Boot也很容易引导它。如果

你对启动速度的要求超过对空间的节省,你应该使用ELF格式的映像引导。ELF格式的文件是不进行压缩的(这意味着其体积较大),但是加载过程却往往会变

更快,因为这只涉及一些存储器拷贝过程。ELF格式的影响通常会含有大量的用以描述它自己的“meta”信息,而U-Boot格式却剥离一切不必要的信

息。

扩展名:

那些包含根文件系统的内核会有扩展名作为其文件类型(例如.ext2或.initramfs)。那些不带根文件系统的内核没有扩展名。

些附带有根文件系统的内核通常在你需要完全在RAM中运行根文件系统的系统中使用。如果你需要在一个外部存储器(诸如 并行Flash 或

串行Flash等等)上运行根文件系统,那么通常需要一个单独的内核映像(standalone Kernel

image)。例如,当根文件系统在RAM中运行时,你对其作的任何修改将在系统重启后消失。一个非易失的根文件系统只能存储于外部设备中。

举例:

这里以本文编译的uClinux映像为例,编译过程生成了下列常见的映像文件:

vmlinux

ELF格式的Linux 内核映像 - 不含根文件系统

linux

“缺省”linux.rootfs 文件的符号链接

linux.cramfs

ELF格式的Linux内核,包含CRAMFS文件系统

linux.ext2

ELF格式的Linux内核,包含EXT2文件系统

linux.initramfs

ELF格式的Linux内核,包含cpio归档的文件系统

linux.initramfs.gz

ELF格式的Linux内核,包含一个压缩的cpio归档的文件系统

linux.romfs

ELF格式的Linux内核,包括一个ROMFS文件系统

vmImage

U-Boot可引导格式的Linux内核 - 不含根文件系统

uImage

“缺省”uImage.rootfs文件的符号链接

uImage.cramfs

U-Boot可引导格式的Linux内核,包含CRAMFS文件系统

uImage.ext2

U-Boot可引导格式的Linux内核,包含EXT2文件系统

uImage.initramfs

U-Boot可引导格式的Linux内核,包含cpio归档的文件系统

uImage.initramfs.gz

U-Boot可引导格式的Linux内核,包含压缩的cpio归档的文件系统

uImage.romfs

U-Boot可引导格式的Linux内核,包含ROMFS文件系统

.initramfs

与initramfs.gz区别的原因在于U-Boot格式映像已经包括压缩功能,initramfs.gz意味着根文件系统进行双重压缩。因此,对于一

个U-Boot格式的可引导映像,使用uImage.initramfs.gz是个坏主意,而应使用.initramfs 。当对ELF文件格式(通过

不进行压缩),应该使用initramfs.gz 。

文件系统映像:

文件系统映像以rootfs开头,以描述该文件系统的短名称作为后缀。如果你乐意的话,可以在开发环境中作为(root back设备)挂在映像。并通过这种方式浏览文件系统的内容。

文件系统映像很少会在目标板上“直接”使用。大多数情况下,你将它们烧写至Flash或其他什么存储设备中,然后在引导Linux时挂载。

文件系统映像通常存放在两个地方。大部分的映像存放于uClinux源码根目录下的romfs文件夹。因为它不包含设备节点(device

nodes),创建工具会生产一个文件(通常称作device_table.txt)用以为最终映像的/dev目录和相关的设备节点创建正确的major

/minor值 与权限。【注:在笔者使用的版本中根文件系统映像一并放置于images目录下】

文件名

描述

rootfs.cramfs

CRAMFS格式的根文件系统

rootfs.ext2

EXT2格式的根文件系统

rootfs.initramfs

cpio归档格式的根文件系统

rootfs.initramfs.gz

cpio归档格式的并使用gzip压缩的根文件系统

rootfs.jffs2

JFFS2格式的根文件系统

rootfs.romfs

ROMFS格式的根文件系统

rootfs.yaffs

YAFFS格式的根文件系统

rootfs.yaffs2

YAFFS2格式的根文件系统

其它文件:

System.map文件提供给每个相关的Linux内核映像。与linux映像类似,它带有rootfs的后缀因此你很容易匹配两者。

有时内核映像文件将以一种更直观的方式提供,从其名称就可了解其包含文件系统的类型。如果是这种情况,映像文件命令类似于rootfs带有.contents(.内容)的后缀。

### 关于 UniApp 框架推荐资源与教程 #### 1. **Uniapp 官方文档** 官方文档是最权威的学习资料之一,涵盖了从基础概念到高级特性的全方位讲解。对于初学者来说,这是了解 UniApp 架构技术细节的最佳起点[^3]。 #### 2. **《Uniapp 从入门到精通:案例分析与最佳实践》** 该文章提供了系统的知识体系,帮助开发者掌握 Uniapp 的基础知识、实际应用以及开发过程中的最佳实践方法。它不仅适合新手快速上手,也能够为有经验的开发者提供深入的技术指导[^1]。 #### 3. **ThorUI-uniapp 开源项目教程** 这是一个专注于 UI 组件库设计实现的教学材料,基于 ThorUI 提供了一系列实用的功能模块。通过学习此开源项目的具体实现方式,可以更好地理解如何高效构建美观且一致的应用界面[^2]。 #### 4. **跨平台开发利器:UniApp 全面解析与实践指南** 这篇文章按照章节形式详细阐述了 UniApp 的各个方面,包括但不限于其工作原理、技术栈介绍、开发环境配置等内容,并附带丰富的实例演示来辅助说明理论知识点。 以下是几个重要的主题摘选: - **核心特性解析**:解释了跨端运行机制、底层架构组成及其主要功能特点。 - **开发实践指南**:给出了具体的页面编写样例代码,展示了不同设备间 API 调用的方法论。 - **性能优化建议**:针对启动时间缩短、图形绘制效率提升等方面提出了可行策略。 ```javascript // 示例代码片段展示条件编译语法 export default { methods: { showPlatform() { console.log(process.env.UNI_PLATFORM); // 输出当前平台名称 #ifdef APP-PLUS console.log('Running on App'); #endif #ifdef H5 console.log('Running on Web'); #endif } } } ``` #### 5. **其他补充资源** 除了上述提到的内容外,还有许多在线课程视频可供选择,比如 Bilibili 上的一些免费系列讲座;另外 GitHub GitCode 平台上也有不少优质的社区贡献作品值得借鉴研究。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值