历史上的今天
返回首页

历史上的今天

今天是:2025年02月01日(星期六)

2020年02月01日 | arm 内核编译

2020-02-01 来源:eefocus

1、决定在什么地方编译你的内核

首先,你需要决定在什么地方编译你的ARM Linux内核。你的HOME目录是一个编译内核的好地方。如果你希望使用其它的目录,可以适当地取代$HOME目录。但是不推荐在/usr/src/linux目录下编译内核。


2、决定内核的版本

对于任何的内核版本 x.y.z,

◎x-主要版本号

◎y-次要版本号,其中偶数表示稳定版本,奇数表示开发或测试版本

◎z-补丁的级别

在ARM的内核树中,你会发现内核版本号后面有一个后缀:-rmkN, or -vrsN,其中'N'是补丁版本号。例如,2.4.26-vrs1表明这个ARM内核的补丁应该应用于2.4.26的内核。

注意:从2.6.0-test2以后的内核版本不在需要-rmk或者-vrs的补丁,因为内核中已经合并了对ARM体系结构的支持。

其它得维护者,如Nicolas Pitre,会创作额外得补丁,并且会增加额外得后缀来表明他们得版本。Nicolas Pitre的补丁增加一个-np后缀,如2.4.21-rmk2-np1。为了得到2.4.21-rmk2-np1的内核源码,你需要2.4.21的内核源码,2.4.21-rmk2的补丁和2.4.21-rmk2-np1的补丁。


3、下载维护者的特殊补丁

在某些情况下,你需要给内核打上某些维护者的特殊补丁,这些补丁增加了针对各种机器的额外的特性或者其它的设备驱动。可是,在通常情况下,当维护者对改变感到高兴时,会将他们的补丁合并到-rmk或-vrs树中去。


4、下载一个ARM补丁

当你使用一个低于2.6.0-test2的内核版本时,才需要这个步骤。2.6.0-test2之后的内核没有-rmk或者-vrs的补丁。 你可能需要下载一个内核补丁,包括所有针对某一个特殊内核版本的ARM特殊更新。可以在ftp://ftp.arm.linux.org.uk/pub/armlinux/source/kernel-patches/. 上找得到。内核版本根据相应的主版本号和次要版本号分别存放在不同的目录。

独立的文件使用patch-x.y.z-rmkN.gz或者patch-x.y.z-vrsN.gz的命名方式,'x', 'y', 'z'和'N'表示版本号,与上面提到的一样。你应该选择下载最新的内核补丁到$HOME目录。它不是拥有最多的特性,就是修正了最多的bug。在下载完主要的内核源码后,你会需要这个版本的补丁。

注意:一些文件命名为pre-patch-x.y.z-rmkN.gz。这些是alpha或者beta补丁,可能是不可靠的。除非你确定你知道自己在干什么并且对目标系统的稳定性不在意,否则你不应该使用这些补丁。然而,它们对于某些新想法的试验是有帮助的。

注意2:有些内核是基于Alan Cox系列的内核。这些内核的名字类似于patch-x.y.z-acm-rmkN.gz,其中x.y.z是linux版本号,N是Alan的版本号。在这种情况下,你需要从内核服务器上的/pub/linux/kernel/people/alan/linux-2.4/获取Alan Cox的相应补丁。


5、下载主要的内核源码

一个补丁文件本身不包含任何可编译的代码。它是一种可用于计算机处理的,描述变化一个文本文件集。你需要获取主要内核源码树。

内核源码可以在任何一个kernel.org的FTP站点上找到,它们分布在世界各地,采用统一的命名方案。所有的站点都以'ftp'开始,并以'.kernel.org'结束,中间放置的是国家标志符。例如:

◎ftp.uk.kernel.org

◎ftp.us.kernel.org

◎ftp.de.kernel.org

等等。你可以通过访问http://www.kernel.org/获取更多的信息。

通常内核源码被存储在/pub/linux/kernel的子目录中,每一个内核版本有以下几种文件:

linux-x.y.z.tar.gz

linux-x.y.z.tar.bz2

patch-x.y.z.gz

patch-x.y.z.bz2

你可以下载linux-x.y.z.tar.gz 文件到你的$HOME目录,你应该寻找一个与你之前获得的patch相匹配的内核版本。这些文件>=14MB。


6、解压ARM内核源码

解压缩你下载的存档文件:

bash$ cd $HOME

bash$ tar zxvf linux-x.y.z.tar.gz

这样会在你的home目录下创建一个名为linux-x.y.z的新目录。进入这个新创建的目录,使用补丁,如:

bash$ cd linux-2.4.26

bash$ zcat ../patch-2.4.26-vrs1.gz | patch -p1

这些补丁是层次结构的,你需要在正确的顺序中使用它们。较长扩展名的补丁依赖于较短扩展名的补丁,所以你需要在-rmk-np补丁之前使用-rmk的补丁。


7、配置内核的编译环境

通常,内核编译系统会在本地机器的体系结构上编译内核。但在交叉编译中是不合适的,所以你需要更改顶级的内核Makefile文件中的两行:ARCH和CROSS_COMPILE。

在2.4.x内核中,如:

ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)

[...]

CROSS_COMPILE =

在2.6.x内核中:

ARCH ?= $(SUBARCH)

CROSS_COMPILE ?=

编辑这两行:

ARCH ?= arm

CROSS_COMPILE ?= /usr/local/bin/arm-linux-

用你的ARM Linux工具链的路径取代/usr/local/bin/arm-linux- 。

下一步就是进行内核的配置和选择你的平台所需要的驱动。在下一步之前,你可能需要阅读linux/README和linux/Documentation/arm/README.这两个文件提供更多关于你的内核版本的具体信息。


8、配置内核源码

有一系列的make目标文件,为你选择的特殊的机器配置内核源码提供默认设置集。对于2.6内核,这一步骤变得更加简单。

2.4内核的配置:

对于2.4内核使用<机器名>_config格式,例如:

a5k_config

ebsa110_config

netwinder_config

rpc_config assabet_config

你应该选择任何一个作为随后的基本配置,并紧跟着运行make oldconfig:

bash$ make netwinder_config

bash$ make oldconfig

oldconfig步骤会提示你在提交默认的机器配置文件后增加了哪些新的配置选项。通常在这些新选项上选择'N'是安全的。

配置2.6内核

对于2.6内核,过程是类似的。使用<机器名>_defconfig来选择机器,例如:

bash$ make netwinder_defconfig

在这种情况下,不需要单独运行oldconfig步骤。


9、编译内核源码

如果你是为其它的程序安装内核源码树,那么你已经完成了。如果你要编译一个新内核,还要输入以下命令:

bash$ make clean

bash$ make dep

bash$ make zImage

bash$ make modules

最后两个命令会真正地编译内核和内核模块。

注意:对于2.6内核,make dep的步骤是不需要的。


10、安装内核

在成功编译内核之后,你会有内核映像,arch/arm/boot/zImage。 如果你是交叉编译,请跳到"Installing a cross compiled kernel"部分。 如果你是本地编译,请继续。

11、安装本地内核

因为你将要升级系统文件,你需要成为'root'。敲入:

bash$ su

Password:

bash#

高度推荐你保存现有内核和模块的备份。你需要做的是独立于机器的。一旦你需要恢复到原来的版本,一个不错的方法是保存一个原有的、已知的、好的内核和模块的版本。如下面的例子所示(对于2.4.3-rmk内核):

bash# cd /lib/modules

bash# mv 2.4.3-rmk1 2.4.3-rmk1.old

bash# cd /boot bash# mv vmlinuz vmlinuz.bak

bash# mv System.map System.map.bak

bash#

现在,安装新的内核模块:

bash# cd $HOME/linux

bash# make modules_install

bash#

这样会拷贝模块到/lib/modules/x.y.z目录下。下一步,安装内核映像(通常是在/boot):

bash# cd /boot

bash# cat $HOME/linux/arch/arm/boot/zImage >vmlinuz

bash# cp $HOME/linux/System.map

bash#

注意,拷贝新内核的命令是cat而不是通常使用的cp。Unix通常不会在文件系统中为包含0数据的文件段分配空间,而是在文件中创建空洞。一些内核引导程序不能识别有空洞的文件,因此使用cat可以保证这种情况不会发生。


12、运行loadmap

Loadmap是运行在Acorn机器上的Linux引导程序的一部分,与带有IDE硬盘的EBSA285机器中使用的EBSA285BIOS一样。对于其它的机器,请参考你机器的文档。 编辑引导配置文件/etc/boot.conf,以便你可以启动vmlinuz.bak或者vmlinuz映像。如果你将vmlinuz内核放在第一,将会成为内核引导程序使用的缺省内核。

运行boot loader map工具:

bash# loadmap -v

bash#

更新map。

在完成之后,准备重启你的机器,试验你的新内核。如果有问题,请跳到下面的"problem"步骤。


13、安装交叉编译内核

内核模块被安装在目标系统的/lib/modules/x.y.z目录下,虽然在宿主系统中通常会是另一个目录。这个目录依赖于你的安装,我们称之为$TARGETDIR。安装模块到$TARGETDIR:

bash$ make modules_install INSTALL_MOD_PATH=$TARGETDIR bash$

这样将把模块放置到宿主机的$TARGETDIR/lib/modules/x.y.z目录下,然后可以放置到合适的文件系统,或者传送到目标机器上。请注意,不要安装这些内核模块到宿主文件系统,因为他们不适合你的宿主内核,将导致你的宿主系统不能启动。

内核会在$HOME/linux/arch/arm/boot/zImage ,内核符号信息会在$HOME/linux/System.map。具体如何安装已经超出本文档的范围。保持System.map文件的安全非常重要-它包含了内核需要的符号信息。如果你需要调试或报告问题,就需要用到它。


14、报告错误

请参考在内核源码树中的REPORTING-BUGS向导。但是要使用linux-arm-kernel邮件列表来报告问题,而非使用linux-kernel邮件列表。

推荐阅读

史海拾趣

Amphenol Aerospace公司的发展小趣事

Amphenol Aerospace 是一家在电子行业中知名的公司,专注于设计、制造和销售航空航天领域的连接器和电缆组件。以下是关于 Amphenol Aerospace 公司发展的五个相关故事:

  1. 创立与早期发展:Amphenol Aerospace 公司的历史可以追溯到1932年,当时在美国新泽西州的Linden市成立了Amphenol公司。最初,该公司主要致力于生产无线电连接器和电缆组件。随着航空航天行业的发展和壮大,Amphenol Aerospace 公司开始专注于航空航天领域,成为该行业的关键供应商之一。

  2. 技术创新与产品多样化:Amphenol Aerospace 公司不断进行技术创新,推出了一系列先进的连接器和电缆组件产品。这些产品具有高可靠性、高耐用性和优良的性能特点,广泛应用于航空航天领域的飞机、卫星、导弹、航天器等设备中。Amphenol Aerospace 公司的产品包括圆形连接器、矩形连接器、光纤连接器等,满足了不同客户的需求。

  3. 客户合作与定制化解决方案:Amphenol Aerospace 公司与航空航天领域的客户建立了紧密的合作关系,共同开发定制化的连接器和电缆组件解决方案。公司的工程团队与客户密切合作,根据客户的需求和规格要求,设计和制造符合特定应用要求的产品。这种定制化解决方案为客户提供了更加个性化和专业化的服务。

  4. 质量控制与认证标准:Amphenol Aerospace 公司注重产品质量控制,并严格遵循行业标准和认证要求。公司的生产工艺和质量管理体系符合ISO 9001质量管理体系认证标准,以确保产品质量稳定可靠。此外,Amphenol Aerospace 公司的产品还通过了航空航天领域的相关认证,如AS9100质量管理体系认证等,确保产品符合行业标准和规定。

  5. 全球布局与市场拓展:除了在美国的生产基地外,Amphenol Aerospace 公司还在全球范围内设有多个生产工厂和销售办事处,为客户提供全面的服务和支持。公司在欧洲、亚洲和其他地区建立了广泛的销售网络,拓展了国际市场份额。通过全球布局和市场拓展,Amphenol Aerospace 公司不断扩大业务规模,增强了在航空航天领域的市场竞争力。

这些故事展示了 Amphenol Aerospace 公司从成立初期到如今在技术创新、产品多样化、客户合作与定制化解决方案、质量控制与认证标准以及全球布局与市场拓展等方面取得的重要进展。

泰科天润(GPT)公司的发展小趣事

机顶盒,全称数字视频变换盒,是连接电视与外部信号源的重要设备,其专业性与科普性均不容忽视。从广义上讲,任何与电视机连接的网络终端设备均可视为机顶盒,它们承担着将各种信号源转换为电视可识别并播放的格式的重要任务。

机顶盒的核心功能在于接收、解码和显示。它能接收来自有线电缆、卫星天线、宽带网络及地面广播等多种传输介质的数字电视信号,并通过内置的解调器和解码器,将这些信号转换为电视能够播放的视频和音频流。这一过程中,机顶盒展现了其强大的技术实力,确保用户能够享受到高质量的视听体验。

随着技术的发展,机顶盒不断进化。从最初的模拟频道增补器、解码器,到如今支持高清、4K乃至8K超高清播放的智能网络机顶盒,机顶盒的每一次升级都带来了更加丰富的内容选择和更加便捷的使用体验。同时,网络机顶盒的出现更是将电视与互联网紧密相连,使得用户能够通过电视屏幕浏览网页、观看在线视频、下载应用程序、享受交互式娱乐等多元化服务。

此外,机顶盒还具备强大的扩展性和可定制性。通过搭载不同的软件和硬件设备,机顶盒可以满足不同用户的个性化需求,如家庭影院功能、社交媒体互动、语音控制等。这些功能的加入不仅提升了机顶盒的实用性,也使其成为了现代家庭娱乐的重要组成部分。

综上所述,机顶盒作为连接电视与外部世界的桥梁,其专业性与科普性在不断提升中。随着技术的不断进步和市场的不断扩大,机顶盒将继续为用户带来更加优质、便捷、智能的视听体验。

Advantech公司的发展小趣事

Advantech公司是一家全球领先的工业计算机、自动化和嵌入式解决方案提供商,其发展历程充满了创新、合作和技术进步。以下是关于Advantech公司发展的五个相关故事:

  1. 创立与早期发展: Advantech公司成立于1983年,最初名为台湾多媒体公司,其初衷是提供音频和视频卡。随着技术的发展和市场需求的变化,公司逐渐转型为提供工业计算机和自动化解决方案的领先供应商。

  2. 全球化战略: 随着全球市场的不断扩大,Advantech制定了全球化战略,积极拓展海外业务。1994年,公司在美国成立了第一家子公司,标志着其国际化发展的开始。此后,Advantech陆续在欧洲、亚洲和其他地区建立了办事处和分支机构,构建起了覆盖全球的销售和服务网络。

  3. 技术创新与合作伙伴关系: 作为工业自动化领域的领导者之一,Advantech不断进行技术创新,并与全球各类合作伙伴密切合作。公司积极投入研发资金,不断推出新产品和解决方案,以满足客户不断变化的需求。同时,Advantech与众多软件和硬件供应商建立了紧密的合作关系,共同推动行业的发展。

  4. 智能化转型: 随着工业4.0和物联网的迅速发展,Advantech积极响应智能化转型的趋势,推出了一系列智能化解决方案,涵盖工业自动化、智慧城市、智能交通等多个领域。公司致力于为客户提供智能化、数字化的整体解决方案,助力其实现生产效率提升和智能化升级。

  5. 生态系统建设: 为了进一步提升解决方案的综合性和竞争力,Advantech积极构建生态系统,与行业合作伙伴共同打造全方位的服务体系。公司通过开放式的合作模式,与合作伙伴共享资源和技术,实现优势互补,共同拓展市场,推动行业的发展和进步。

以上述五个方面为基础,Advantech在电子行业中不断发展壮大,成为了全球工业自动化和智能化领域的领导者之一。

HellermannTyton公司的发展小趣事

Heimann Optoelectronics Gmbh深知人才是企业发展的核心动力。公司建立了完善的人才培养体系,通过内部培训、外部交流等多种方式提升员工的专业技能和综合素质。同时,公司还注重营造开放、包容的企业文化,鼓励员工创新思维和团队合作。这种良好的企业文化氛围吸引了大量优秀人才加入公司,为公司的持续发展提供了有力的人才保障。

以上五个故事虽然基于虚构的“Heimann Optoelectronics Gmbh”公司构建,但反映了电子行业中企业发展的一般规律和趋势。

Dow-Key Microwave Corporation公司的发展小趣事

1945年,第二次世界大战结束后不久,Dow-Key Microwave Corporation在美国成立。公司创始人凭借对射频和微波技术的深刻理解和市场需求的敏锐洞察,决定专注于射频微波开关的制造。在初创阶段,公司面临资金短缺、技术挑战和市场接受度不高等问题。然而,创始人及其团队凭借不懈的努力和创新的精神,逐渐克服了这些困难,为公司的发展奠定了坚实的基础。

CALMIRCO公司的发展小趣事

CALMIRCO公司深知合作共赢的重要性,因此积极与上下游企业建立紧密的合作伙伴关系。公司与多家知名芯片制造商、电子设备生产商等建立了长期稳定的合作关系,共同推动产业链的发展。通过资源共享、技术互补等方式,CALMIRCO公司与合作伙伴实现了共赢发展,共同提升了行业竞争力。

问答坊 | AI 解惑

锁相环电路

本帖最后由 paulhyde 于 2014-9-15 04:03 编辑 锁相环电路  …

查看全部问答>

帮忙推荐一个伺服电机

现在要寻找一款伺服电机,要求电压DC24V以下,功率10W以下就可以,体积尽量小的。有没有人用过,请帮忙推荐一款。…

查看全部问答>

塑料晶体管诞生

普林斯顿大学的研究人员表示,通过将有机导体,半导体和绝缘体喷墨打印到一层昂贵的聚合物基板上可生成全塑晶体管,这种全塑晶体管可以大幅降低有机太阳能电池的价格。Yueh-Lin (Lynn) Loo教授针对其全塑晶体管发明了一种新的塑化工艺,她希望这 ...…

查看全部问答>

上海“研祥”工控机广受客户青睐,推荐大家:021-28131502 汤先生欢迎选购

上海“研祥”工控机推荐大家:021-28131502 汤先生欢迎选购…

查看全部问答>

WinCE 下非模态对话框的问题以及对话框全屏的问题

请问WinCE下支持MFC的非模态对话框吗?我创建的非模态对话框咋WinCE下,弹出来后,然后用鼠标拖动对话框移动,可是每移动一次,屏幕上就多出一个对话框(和原来的一模一样的),单击关闭也没有响应,不知道是为什么?还有就是在对话抗构造函数中我 ...…

查看全部问答>

c# WinCE 无线网卡的信号强弱 问题

c# WinCE 无线网卡的信号强弱 问题 我想通过 c#代码获取 类似ping 的功能,或是获取无线网络的信号强弱, 因为我想在网络连通性好的时候向服务器传送数据,不好的时候存到PDA得本地数据库中…

查看全部问答>

分享下—AHB总线下的slave ram的verilog代码

AHB总线下的slave ram的verilog代码,好不容易找到的,仅供参考! [ 本帖最后由 尚水云者 于 2011-3-30 20:37 编辑 ]…

查看全部问答>

MSP430F249的I2C模块

      MSP430F249的I2C模块使用的是七位地址模式,当初调试时发现接受数据时,接收到的第一个数据容易变成上一次接收的最后一个数据,一直它和其他的I2C模块一样,最后静下心看了他的英文手册发现它使用的是七位地址模式 ...…

查看全部问答>

MSP430G225

求大神们帮我写一个关于用MSP430实现电压测量系统的设计,其中采用12864显示,外界DS1302时钟芯片,大神们快快帮忙啊,Thx。。。。。:rose:…

查看全部问答>