我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

最近想尝试把新的Linux内核移植到开发板上看看能不能顺利运行,我的基础版本是买板子时附带的2.6.30版本,编译器版本是4.3.3。

下载源代码和编译器

下载Linux源码,源码的官方网站是,官方git分支有多个,大家可以根据需要选择,我选择的版本是:

,推荐使用此版本,因为它具有更完整的分支。

你也可以下载 Linus 的分支:

。该分支的分支很少,但标签很多。

使用git,可以方便的进行版本切换,非常适合实验。

下载编译器:

随着内核版本的升级,编译器版本也需要升级。撰写本文时,最新的编译器版本是 13.3。不过,编译器版本越高越好。太新的编译器和旧的内核也可能存在兼容性问题。

新内核有一个脚本.//cc-.sh可以检查编译器是否正常。

armlinux编译内核_linux内核编译配置文件_linux arm 内核编译 配置

它调用另一个脚本 .//min-tool-.sh,显示内核支持的最低编译器版本。

老内核我没有找到对应的工具,但是编译器会提示,比如版本太高的话,会出现找不到文件的错误。

linux内核编译配置文件_armlinux编译内核_linux arm 内核编译 配置

我用13.3的编译器编译.4内核时出现上述错误,换成4.3.3编译器后就OK了。

配置环境变量

编译前需要配置环境变量,将编译器的bin路径加入PATH,可以修改~/.或者/etc/。此方法长期有效,开机状态下都可以使用。也可以直接在命令行窗口配置PATH=[编译器bin路径]:$PATH。此方法暂时针对本命令行窗口,关闭后即失效。关于环境变量更详细的信息请自行搜索学习,这里就不赘述了。

为了编译内核,还需要下载一些必要的工具:

sudo apt bc bison flex gcc git gzip -dev -dev -dev make perl-base rsync tar xz-utils

这只是举个例子,随着内核的发展,可能有些工具不需要了,或者版本不对,又或者需要一些其他的新工具。不用担心,如果编译过程中缺少工具,编译器会报错,我们通过错误信息就知道需要安装什么了。

修改代码

前期工作完成后,就可以进入Linux源码目录了。交叉编译需要明确给出两个环境变量ARCH和,否则会默认编译x86版本的内核。可以在make命令参数中给出它们:

也可以直接写入文件,我选择这种方法,比较方便;

armlinux编译内核_linux arm 内核编译 配置_linux内核编译配置文件

以下修改都是针对我的板子的,你的板子可能不需要修改,需要根据你的板子自己判断,不能盲目照搬。

修改系统时钟。我的板子用的是12M晶振,内核默认是16.9344M。这里如果不改的话,log输出会乱码。修改的文件是arch/arm/mach-s3c/mach-.c,老版本是arch/arm/mach-/mach-.c或者arch/arm/mach-/mach-.c,所以需要灵活掌握。

armlinux编译内核_linux arm 内核编译 配置_linux内核编译配置文件

这个功能不同版本也有区别,只要掌握好2440这个键就不会错。

还有一个地方需要修改,我的uboot把机器码改成了168,所以Linux那边也需要改,这个很关键,内核之所以知道跑哪个芯片,哪个平台,就是靠这个机器码来决定的。

要知道uboot传递的是哪个机器码,可以在uboot命令行中输入bd或者检查

linux arm 内核编译 配置_armlinux编译内核_linux内核编译配置文件

内核修改文件arch/arm/tools/mach-types,找到并将362改为168

linux内核编译配置文件_linux arm 内核编译 配置_armlinux编译内核

如果机器码不正确,内核会提示以下信息

armlinux编译内核_linux arm 内核编译 配置_linux内核编译配置文件

列出的内容与您的配置相关。

上述修改是每个版本都必须进行的,因此以后我不会特别指出。

配置内核

接下来准备 . 文件,这个是内核编译依赖的配置文件,整个内核相关的宏都在这个文件里,我们的操作就是改这个文件,如果你不确定你想要的配置是生效还是关闭,可以在 中搜索查看。(注意前面有个英文句号,代表默认是隐藏文件)

Linux 内核提供了一些预定义文件,我们可以以其中一个作为基础开始,执行以下命令,将预定义文件复制到 .:

linux内核编译配置文件_linux arm 内核编译 配置_armlinux编译内核

到此就可以编译了,我的目标是尽量少修改,让内核可以启动,也就是内核可以运行,可以输出日志。所以我先用默认配置编译,下载到板子上看效果,再根据情况做进一步的操作。下面我会根据版本分别描述不同版本遇到的问题及解决方法,供大家参考。

(实际移植的时候一定要尽量删掉不需要的东西,否则编译会比较费时间,而且编译后的文件会很大)

在开始之前,让我们先使用make命令看一下Linux内核配置界面。

armlinux编译内核_linux内核编译配置文件_linux arm 内核编译 配置

最上面一行显示的是使用的配置文件、平台、内核版本,这里可以确认你的交叉编译环境是否配置正确,不同版本这个界面会有所不同,需要灵活应对。

2.6.30-2.6.34

这些版本在使用 4.3.3 编译时需要额外修改/.pl

linux arm 内核编译 配置_armlinux编译内核_linux内核编译配置文件

编译成功之后就可以下载到板子上,直接开机运行就可以了,没什么特别需要注意的,很顺利。

2.6.35

这个版本有问题,跟上面的通用方法一样,这次操作就卡在这里了

linux内核编译配置文件_armlinux编译内核_linux arm 内核编译 配置

之后就没有任何输出了,然后我从网上的一篇博客里找到了这段话

尝试之后发现确实管用。可见老版Linux内核的行为在新内核中未必能行。当然这里就不深究更深层的原因了,因为后来升级后的Linux版本又恢复到了不用拆掉其他板子就能运行的状态。

(以上文章为转载,未能找到原始出处,就不列转载出处了,有兴趣的请自行搜索。)

3.4.y

这个版本更离谱,以未定义的指令启动,直接重启。

armlinux编译内核_linux内核编译配置文件_linux arm 内核编译 配置

按照之前的想法,把其他没用到的板子去掉,然后就变成这样了

armlinux编译内核_linux arm 内核编译 配置_linux内核编译配置文件

遇到这种情况不要慌张,内核提供了调试信息,我们可以通过打开调试信息来得到线索。以前的版本可能也有这种可能,但我是在这个版本才发现这个配置的。如果你有以前的版本,可以试一试。

armlinux编译内核_linux arm 内核编译 配置_linux内核编译配置文件

编译并下载

linux内核编译配置文件_linux arm 内核编译 配置_armlinux编译内核

这里可以看到波特率为0,明显有问题,我在uboot中传过了,但是这里没有收到,就不给大家悬念了,这个版本的内核增加了设备树,uboot传递参数的方式变了,我的uboot比较老,所以需要配置内核按照老的方式传递参数。

armlinux编译内核_linux arm 内核编译 配置_linux内核编译配置文件

之后再次编译下载,输出正常,说明uboot参数传递成功。

linux内核编译配置文件_linux arm 内核编译 配置_armlinux编译内核

当然这里内核也提示这个方法已经过时了,所以赶紧升级uboot吧。

3.19

此版本采用默认预定义配置,不会出现未定义指令,直接输出乱码,似乎是参数传递的问题。

linux arm 内核编译 配置_linux内核编译配置文件_armlinux编译内核

启用旧的传递参数方式。此版本将此选项置于启动下。

armlinux编译内核_linux内核编译配置文件_linux arm 内核编译 配置

编译并下载,这次就可以启动OK了。

linux内核编译配置文件_armlinux编译内核_linux arm 内核编译 配置

这里我们可以发现内核的兼容性又提升了,不需要过多的剪裁就可以正常运行。可见内核升级就是一个不断遇到问题并不断改进的过程。

4.19.y

在做这个版本的时候开始提示编译器太旧,需要升级。

armlinux编译内核_linux内核编译配置文件_linux arm 内核编译 配置

切换到最新的编译器

继续编译就OK了。

无法启动默认下载

不过已经确认是参数传递有问题,先改成老办法,编译下载,就可以了。

linux arm 内核编译 配置_armlinux编译内核_linux内核编译配置文件

5.19.y

这次我们就直接开始按照老的方式传递参数,按照老的方式编译、下载。

linux arm 内核编译 配置_linux内核编译配置文件_armlinux编译内核

直接就可以启动了,注意此时内核大小是4M,而初始的2.6.35大小只有2M,翻了一倍,从日志中也可以看出内核结构发生了巨大的变化。

6.2.y

修改配置与5.19相同,编译启动也正常。

armlinux编译内核_linux arm 内核编译 配置_linux内核编译配置文件

Linux 6.3 及以上版本不支持此芯片,当然老版本内核也够用,这个年代的芯片很多都是用老内核,没有特殊需求的话没必要升级到新内核,这可能是新版本不再支持的原因。

二维码
扫一扫在手机端查看

本文链接:https://by928.com/6442.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线