降低OpenWRT的Linux内核版本

不久前,OpenWRT关闭了官方的svn服务器,导致很多客户无法按照科创笔记的固件编译指导文档获取OpenWRT代码,只能使用git方式。相比于svn,git貌似无法直接获取指定版本的代码。然而,使用git获取的代码已经将Linux内核升级到4.1版本,最新的已经是4.4版本了。这样的更新速度对于业余爱好者也许是件好事,可是对于产品开发者,却未必如此。

为了移植某驱动程序,笔者可谓绞尽脑汁,在4.1内核版本上,尝试了很多次都没能成功,后来仔细分析,才知道是内核版本过高导致的,本文给出降低内核版本的方法,具体编译环境的搭建,还请自行查阅其他文章。

1. 登录Linux编译服务器,在当前用户目录下创建一个新的目录,如erm。

2. 输入以下命令

git clone git://git.openwrt.org/openwrt.git

接下来便进入漫长的等待过程,如下图

receiving-objects

3. git clone完成后,会出现如下提示

git-clone-done

4. 进入openwrt目录,输入以下命令

git log

并使用Page Up/Down与上下方向箭头查看log内容,可以发现,在46553版本中,移除了对3.18内核版本的支持,如下图。

remove-linux-3.18-support

5. 找到一个合适的仍然支持Linux 3.18的版本,这里笔者选择了46550。将46550版本对应的commit字符串复制下来,并按“q”退出git log。输入以下命令

git checkout 367c4188921d77f5edb3dcfd148a59652fbfff37

然后便可以看到“HEAD is now at 367c418…”的字样,如下图。

git-checkout

6. 安装软件包,输入以下命令

./scripts/feeds update

./scripts/feeds install –a

7. 输入make menuconfig命令,选择Advanced configuration options (for developers)—>Toolchain options,然后选择C library implementation,选择uclibc,如下图。

uclibc

然后退出并保存配置。

8. 编辑target/linux/ar71xx/Makefile,将内核版本由4.1修改为3.18;编辑target/linux/ar71xx/image/Makefile,修改flash分区。

9. 笔者需要编译QCA9531的固件,所以需要再次make menuconfig,并将Target Profile选择为AP143。

10. 最后make V=s -j 29(多线程编译),即可得到用于QCA9531的3.18内核版本的固件。

4 thoughts on “降低OpenWRT的Linux内核版本

发表评论