不久前,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
接下来便进入漫长的等待过程,如下图
3.git clone完成后,会出现如下提示
4.进入openwrt目录,输入以下命令
git log
并使用Page Up/Down与上下方向箭头查看log内容,可以发现,在46553版本中,移除了对3.18内核版本的支持,如下图。
5.找到一个合适的仍然支持Linux 3.18的版本,这里笔者选择了46550。将46550版本对应的commit字符串复制下来,并按“q”退出git log。输入以下命令
git checkout 367c4188921d77f5edb3dcfd148a59652fbfff37
然后便可以看到“HEAD is now at 367c418…”的字样,如下图
6.安装软件包,输入以下命令
./s/feeds update
./s/feeds install –a
7.输入make menuconfig命令,选择Advanced configuration options (for developers)—>Toolchain options,然后选择C library implementation,选择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内核版本的固件。