linux 内核源码arch/ 目录的前世今生

本文回顾了Linux移植到ARM的历史,包括早期黑客的工作痕迹、NOKIA与TI的合作、Intel Xscale的发展困境、Motorola与Freescale的关系变化、Samsung的成功案例及Google与Qualcomm的合作现状。

历史的痕迹:在最新的linux-2.6.31/arch/arm/文件夹下,仍然保留Linux最初向ARM处理器移植的痕迹,最初的移植由黑客完成,在老的移植的代码文件的头部保留着黑客的名字;最初的ARM也不像现在这样的先进,都是StrongARM、ARM7之类,具体文件夹如mach-sa1100、mach-shark、mach-rpc等。现在就ARM来说已不是StrongARM、ARM7的时代,但勿忘历史,让我们记住那些把Linux移植到ARM的大牛们,记住哪个开拓的年代。
 
   夫妻的利益:当NOKIA的手机在世界流行时,和那句名言”成功的男人背后有一个女人,或者是成功的女人背后有一个男人“一样,NOKIA的背后站着TI,可以认为NOKIA 2009年前的手机80%都是都使用了TI的OMAP处理器,换句话说OMAP处理器就是NOKIA和TI结婚证书,看一看mach-omap2下文件的开头有TI的地方大多就有NOKIA,也许你就能理解其中的深意。但古话又说的好”夫妻本是同林鸟、大难来时各只飞“,在这个危机的年头,NOKIA和TI的关系也偶现危机,它们的未来还真说不好。
 
   成功的失败:有部电影叫《真实的谎言》,套用一下就是“成功的失败”,INTEL是成功者,这样说肯定很少人回提出疑义,但成功者也有失败,INTEL在X86上风光无限,在XSCALE上却体味到少有的失败,从StrongARM到XSCALE,INTEL好象没有体味到多少成功,XSCALE在网络处理器上的应用--IXP系列,到现在已经没有刚推出IXP4xx/IXP24xx时的意气风发,IXP4xx还有亮点, IXP24xx则完全是个残废;XSCALE在存储处理器--IOP系列上有点成功,多少能为INTEL换来些美金;最失败就是XSCALE在消费电子处理器上的应用-PXA系列,现在Marvell已经成为其主人。linux-2.6.31/arch/arm/文件夹下的辛酸也许只有INTEL才体味的到。感兴趣可以到mach-pxa等文件夹下浏览一翻。
 
   亲生的儿子:MOTOROLA是个伟大的公司,对它影象最深的广告是“一头骡子拉着一部摩托车”,现在MOTOROLA并不如意,处理器业务已转给儿子Freescale,手机业务陷入泥潭,特别是手机业务,当QT软件被NOKIA收购的时候,MOTOROLA体会的痛苦只有自己知道,如果MOTOROLA收购了QT软件,也许...,可惜历史很难改变,当MOTOROLA病入膏肓的时候,儿子是会痛苦的,本来Freescale可以凭借MOTOROLA的手机业务把mx2/mx3处理器做大,现在就如一场噩梦。真是人算不如天算。
 
   喜人的收获:喜欢到linux-2.6.31/arch/arm/下浏览一翻的公司肯定有Samsung,s3c24xx系列借中国的东风(IT制造业)赚取了大把的人民币;s3c64xx系列依赖APPLE的IPHONE效应开始大把大把的赚取美金,可谓风光无限。看看mach-s3c2410、mach-s3c2412、mach-s3c2440、mach-s3c2442、mach-s3c2443、mach-s3c6400到mach-s3c6410的里程就知道Samsung的一路风光。看深一点,Samsung此处的成功说是技术的成功不如说是共赢理念的成功,看看以上文件夹下文件的版权所有并不是Samsung而是Simtec Electronics,也许就能理解我这么说的意思。
 
   朋友的敌人:看到mach-msm文件夹下文件里出现Google和高通在一起的时候,我并不惊讶,有时”敌人的敌人是朋友“这个逻辑非常通俗易懂,当高通进入ARM手机平台开发的时候没找到强大的朋友,还好有强大的专利大棒,能够做到收入90亿美元,利润80亿美元。不过当专利被视为对国家利益威胁的时候,高通再牛也得做自我改变了。正好Google推出了Android手机操作系统平台,需要有ARM硬件平台的支持,可谓两者一拍即合。只是这种结合并不牢靠,Google和TI、Samsung在的ARM硬件平台上也有合作。所以有时”敌人的敌人是朋友“这个逻辑又让人困惑。

转载于:https://www.cnblogs.com/wangxianzhen/p/3291763.html

<think>嗯,用户的问题是关于Linux内核编译时如何选择arch/arm64/configs目录下的配置文件。这个问题需要结合Linux内核编译配置的机制来回答。 首先,需要理解arch/arm64/configs目录的作用。根据引用[1]和[5],这个目录存放了针对不同ARM64平台的默认配置文件。这些文件通常以_defconfig后缀命名。这些配置文件是预先定义好的配置集合,对应特定硬件平台的默认内核选项。 在编译内核时,用户可以通过make命令指定使用哪个配置文件。具体操作是执行类似make xxx_defconfig的命令。这里xxx_defconfig就是arch/arm64/configs目录下的某个文件名。执行这个命令后,内核配置系统会将该文件复制为顶层目录下的.config文件。 在引用[2]中可以看到实际操作的例子:make xxx_imx6ull_defconfig。这个命令就是从arch/arm/configs目录复制配置文件。虽然示例是ARM架构的,但ARM64架构的机制完全一致。 引用[3]和[4]提到了环境变量ARCH的设置。对于ARM64架构,编译前需要设置export ARCH=arm64。这样配置系统才知道要到arch/arm64目录下查找配置文件。如果不设置这个环境变量,系统可能会默认使用x86等架构的配置。 在配置过程中,用户还可以通过make menuconfig命令进行交互式配置。如引用[4]所示,这个命令需要同时指定ARCH和CROSS_COMPILE环境变量。执行后会出现配置界面,用户可以在默认配置基础上进一步修改。 总结来说,配置文件的选择过程是:设置ARCH环境变量 -> 执行make xxx_defconfig -> 生成.config文件 -> 可选的交互式配置。这个机制保证了内核可以灵活适配不同硬件平台。 用户可能是嵌入式开发者,正在为特定ARM64设备定制内核。需要强调配置文件与硬件平台的对应关系,以及环境变量的重要性。可以建议用户查看目标设备的文档,确定应使用的默认配置文件名称。 最后考虑生成的相关问题:可以询问配置过程的具体步骤、defconfig文件的定制方法、配置选项的含义等,这些都是用户可能进一步想了解的内容。</think>在 Linux 内核编译过程中,`arch/arm64/configs` 目录下的配置文件(通常以 `_defconfig` 结尾)的使用由用户在编译配置阶段**明确指定**。具体选择和使用方式如下: 1. **指定目标架构 (`ARCH=arm64`)**: * 在编译命令中,必须通过环境变量 `ARCH` 指定目标架构为 `arm64`。这告诉编译系统去 `arch/arm64` 目录下寻找架构相关的代码和配置。 * **命令示例**: ```bash export ARCH=arm64 ``` 或者在单个命令中内联设置: ```bash make ARCH=arm64 <command> ``` 2. **选择特定的 `defconfig` 文件**: * 使用 `make <defconfig_name>` 命令来选择一个特定的默认配置文件。`<defconfig_name>` 就是 `arch/arm64/configs` 目录中某个文件的名称(去掉路径)。 * **命令示例**: ```bash make ARCH=arm64 defconfig_name_defconfig ``` * 例如,如果 `arch/arm64/configs` 目录下有一个文件叫 `myboard_defconfig`,那么命令就是: ```bash make ARCH=arm64 myboard_defconfig ``` 3. **执行过程**: * 当执行 `make ARCH=arm64 defconfig_name_defconfig` 时,编译系统会: 1. 定位到 `arch/arm64/configs/defconfig_name_defconfig` 文件。 2. 将这个文件复制到内核源码树的**根目录**下,并命名为 `.config`。 3. 根据 `.config` 文件的内容,解析并设置所有内核配置选项的默认值。`.config` 文件是后续编译过程真正使用的配置文件[^1][^2][^5]。 4. **后续操作 (可选但常见)**: * **交互式配置 (`menuconfig`, `nconfig`, `xconfig`)**:在应用了默认配置(`.config`)之后,通常需要根据具体硬件细节或需求进行调整。此时使用交互式配置工具: ```bash make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig ``` 这些工具会读取当前的 `.config` 文件作为起点,允许你修改选项。修改后的结果会保存回 `.config` 文件[^4]。 * **编译内核**:配置完成后(无论是直接使用 `defconfig` 还是修改后的结果),使用 `.config` 文件进行编译: ```bash make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -jN ``` 其中 `-jN` 指定并行编译的线程数[^2]。 **总结关键点**: * **`arch/arm64/configs` 目录的作用**:存放针对不同 ARM64 硬件平台或不同配置需求的**预定义默认配置模板**(`*_defconfig` 文件)[^1][^5]。 * **选择机制**:用户通过在配置阶段执行 `make ARCH=arm64 <defconfig_name>_defconfig` 命令**主动选择**要使用的默认配置文件。`<defconfig_name>` 必须与 `arch/arm64/configs` 目录下某个文件名(不含 `_defconfig` 后缀)匹配[^1][^2][^5]。 * **`.config` 文件的生成**:选中的 `defconfig` 文件会被复制到内核根目录成为 `.config`,这是编译时实际使用的配置文件[^1][^2][^5]。 * **环境变量 `ARCH` 的重要性**:它是指定目标架构(从而定位到正确 `arch/` 子目录)的**关键**,在配置和编译命令中都需要指定[^3][^4]。 **简单来说**:内核编译系统本身不会“自动决定”使用 `arch/arm64/configs` 下的哪个文件。**需要你明确告诉它**使用哪个 `defconfig` 文件,通过执行 `make ARCH=arm64 your_chosen_defconfig` 命令来实现。这个命令的结果就是将你选择的那个模板文件复制为工作配置文件 `.config`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值