版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明

http://tigerwang202.blogbus.com/logs/43927976.html

首先从Blackfin uClinux网站下载最新版uClinux内核。

http://blackfin.uclinux.org/gf/project/uclinux-dist/frs/

上述地址除了提供内核源代码外,还提供一些预编译的内核文件供特定电路板使用。如果使用ADI官方的验证板,可从中选择适合板子的编译好的内核文件。

那些内核文件一般没有后缀扩展名,你在下载之后可以使用UNIX的file命令察看文件类型,例如:

file linux-2.6.x/linux

linux-2.6.x/linux: ELF 32-bit LSB executable, version 1 (SYSV), statically linked, not stripped

ELF是预编译的存储器映像文件,它可直接下载至目标板。这些文件不需要编译,拿来就可直接使用。

还有一类是tar.bz2为后缀的源代码压缩包文件,为了编译内核,你需要下载它。撰写本文时,笔者下载的是:

uClinux-dist-2008R1.5-RC3.tar.bz2

将其解压缩至项目根目录下的kernel文件夹。例如,笔者的内核源码放置在/home/uclinux/kernel/uClinux-dist-2008R1.5-RC3文件夹。

tar –vxjfuClinux-dist-2008R1.5-RC3.tar.bz2

在你为目标板建立内核的过程中,配置属于最初的阶段。内核配置的方法很多,而且配置设置时有很多选项可以选择。不管你使用哪种方法设定设置或者选择哪些配置选项,在你设定好配置后都将产生.config文件以及建立过程其余步骤将会用到的一些符号连接和头文件。

以下的配置过程我们使用一个文本界面的设置程序,这也是最常用的设置方法。

如果使用的是Debian系统,默认安装没有ncurses库的,使用make menuconfig会提示出错,需要先运行下列命令安装这个库:

apt-get install libncurses5-dev

切换至内核源代码目录,运行以下命令配置内核。该命令提供一个基于文本界面的友好的内核设置界面。

make menuconfig

注意:如果你先前从一个平台设置切换至另一平台,你需要先运行 make clean 命令,以避免编译内核时可能出现的错误。一个比较可靠地方式是:无论在什么时候,在你配置内核时,都运行make clean 命令。

一些用户可能使用make xconfig命令来配置内核,这个命令提供一个图形化的配置。较新版本的内核可能要求你安装有QT图形库以运行makexconfig命令。如果,你没有安装那些库make xconfig命令会出错(例如Debian的默认安装就没提供QT库),这时可以使用 makemenuconfig命令,它是除了基于文本界面外,其它功能都是相同的。或者,你可以使用下列命令安装QT库(仅适用于Debian)

apt-get install tk8.4

注:笔者下载的源码包使用TK的GUI库,故使用上述命令安装。

下面的设置在menuconfig的文本设置界面中进行。

在输入make menuconfig命令后,终端会输出一些信息,随后出现文本设置界面,如下图所示。

选择” Vendor/Product Selection”(生产商/产品选择)选项。

在Vendor/Product Selection窗口中,请确认AnalogDevice被设置为Vendor(如上图所示)。这里,我们选择一块BF533-STAMP的验证板作为编译目标。(我们仅仅是为了演示整个编译过程,在下面的文章里将介绍如何添加自己的板子作为编译目标)在你选择一块验证板作为编译目标时,系统默认会根据该目标板的配置文件加载一些默认设置。

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

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

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

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

在内核设置窗口中你可以进行各种内核选项和设备驱动设置。如果这是你第一次编译内核,在你不知道这些选项的确切意义之前,强烈建议你不要修改任何选项(因为我们练习的目的是熟练内核编译的流程,使用默认的选项就可以。)在下面的文章中你将学习如何设置内核使其适合特定的目标板。

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

在终端执行一些命令后,出现“uClinux v3.2.0Configuration”窗口。在这个窗口中,你可以设置各种应用程序(它们可能是ADI预先demo程序,用来演示uClinux上的一些特定应用,如音频、视频播放器等)。如果这是你第一次编译内核,还是建议保持缺省设置,不要做任何修改。

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

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

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

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

在你完成对一些应用程序的裁剪后,通常输入make命令对系统进行编译。如果一切顺利,在几分钟的等待后,编译后的文件将存放在一个称作images的子目录中(它位于uClinux源码根目录下)。使用cd命令切换至该目录,并用ls命令列出其中包含的文件。你会得到如下图所示的一批文件。那些不同的文件有什么明确的用途吗?

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

请注意以下操作适用于所有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 Kernelimage)。例如,当根文件系统在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文件夹。因为它不包含设备节点(devicenodes),创建工具会生产一个文件(通常称作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(.内容)的后缀。

移植linux内核-映像文件,移植Linux内核-映像文件相关推荐

  1. 基于ARM的嵌入式linux 内核的裁剪与移植

    0 引言     微处理器的产生为价格低廉.结构小巧的CPU和外设的连 接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面.尽管从八十年代末开始,已经陆续出现了一些嵌入式 ...

  2. linux 2.6.35 内核配置 usb,Linux 2.6.24.4移植到S3C2410(nano2410)之:USB

    Linux 2.6.24.4移植到S3C2410(nano2410)之:USB [平台信息] 目标板(Nano2410)------------------------ CPU: S3C2410X S ...

  3. go移植linux内核书名叫啥,嵌入式 Linux根文件系统移植之Linux文件系统简介-Go语言中文社区...

    学号:16020311003    姓名:杨虎成 [嵌牛导读]Linux支持多种文件系统,文件系统接口实现为分层的体系结构,将用户接口层.文件系统实现和操作存储设备的驱动程序分隔开 [嵌牛鼻子]Lin ...

  4. Linux移植:正点原子阿尔法IMX6ULL开发板Linux内核源码移植详细步骤(4.1.15版本内核)

    Linux移植:正点原子阿尔法IMX6ULL开发板Linux内核源码移植详细步骤(4.1.15版本内核) 文章目录 Linux移植:正点原子阿尔法IMX6ULL开发板Linux内核源码移植详细步骤(4 ...

  5. STM32MP157 Linux系统移植开发篇14:Linux内核RGB LCD驱动移植

    本文章为<STM32MP157 Linux系统移植开发篇>系列中的一篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板).stm32mp157是ARM双核,2 ...

  6. 嵌入式Linux(二十二)Linux内核分析及移植

    1. 编译linux内核   NXP从linux官网下载内核,然后移植到自己的CPU,我们的移植是基于NXP,再移植到自己的开发板. 制作一个sh: #!/bin/sh make ARCH=arm C ...

  7. mini2440 linux移植开发实战指南,Linux-2.6.32.2内核在mini2440上的移植---移植SD卡驱动...

    移植环境(红色粗字体字为修改后内容,蓝色粗体字为特别注意内容) 1,主机环境:VMare下CentOS 5.5 ,1G内存. 2,集成开发环境:Elipse IDE 3,编译编译环境:arm-linu ...

  8. Linux内核的裁剪和移植

    linux内核的裁剪和移植具体都在这个网址里面. https://blog.csdn.net/xie0812/article/details/10816059 https://blog.csdn.ne ...

  9. Linux下添加eigen头文件,移植Eigen库到SylixOS下及使用方法

    1. 开发环境 宿主机:Windows 7 集成开发环境:Real-Evo IDE 3.5.3 虚拟机:Ubuntu 目标机:x86 2. Eigen简介 Eigen是一个提供了线性代数.矩阵.向量操 ...

最新文章

  1. Exp 8 Web基础 20164302 王一帆
  2. ZOJ 3820 Building Fire Stations
  3. 网络情况不稳定 无法连接服务器,提示网络正常无法连接服务器
  4. Java Review - Queue和Stack 源码解读
  5. 信息系统项目管理师项目变更管理
  6. NOIP2018 退役记
  7. 用js做分页,点击下一页时,直接跳到了最后一页——Number()的妙用
  8. 给你的执行力马上充值
  9. Java中Error和Exception的异同
  10. 【hortonworks/registry】registry源码主类该怎么运行
  11. Kafka集群全部断开,然后重启时报“The broker is trying to join the wrong cluster. Configured zookeeper.connect……”问题
  12. vnc连接服务器怎么修改配置,vnc连接服务器怎么配置
  13. ubuntu12.04下安装NVIDIA驱动
  14. 【acl-访问控制列表】
  15. 十分钟理解线性代数的本质_如何理解线性代数?
  16. 回答一个关于产品经理的入门门槛高不高的问题
  17. 【图像修复】论文阅读笔记 ----- 《Image inpainting based on deep learning: A review》
  18. 《我在大学挺好的》之——选择了计算机专业
  19. NDT-MCL定位算法论文解读
  20. 复杂领域的Cynefin模型和Stacey模型

热门文章

  1. define 字符串_C++如何使用define关键字以便使用中文编程?
  2. springmvc限流解决方案
  3. web项目Servlet配置及jsp访问Servlet
  4. Android通知点击事件传递参数
  5. div中图片下方有边距
  6. superset docker方式安装
  7. fopen -- 打开文件或者 URL
  8. android密码可见不可见的光标控制,Android EditText 在设置为输入密码的时候 密码是否可见 光标在最后显示...
  9. el表达式,c标签的使用
  10. 实验8 分析一个奇怪的程序