编译openwrt基本教程②-编译一个系统

没错又是我(╯‵□′)╯︵┻━┻

我又来填坑啦~~~

 


上回说到我们下载好代码之后,时隔多日,我们可以用svn up命令来更新一下代码(会自动拉取最新的代码合并到本地,如果你的是trunk版本的分支,可以经常执行这条命令来保持你的代码是最新的,如果你是刚刚svn co下来的,当我没说¬_¬)

openwrt默认的代码只有核心部分,其他的东西是以软件包的形式集成的,软件源配置文件在根目录的feeds.conf,这个跟一般的linux操作系统的理念一样,有软件源,系统刷好之后也可以通过安装软件命令opkg install packagename来在线安装你想要的软件包。

根目录下默认有一个feeds.conf.default,如果你没有进行特别的配置的话,目录下没有feeds.conf,默认就会把这个feeds.conf.default复制一份并重命名为feeds.conf。当然你也可以编辑feeds.conf,添加自己的软件源,这是后话。好像老版本的openwrt源码要自己复制重命名一份feeds.conf,我这里就不啰嗦了,我们直接使用update命令来更新下载软件源里面的软件包:

所消耗的时间跟的网络很大关系,有条件建议挂个隧道。

下载完成之后我们执行命令集成安装加入这个包:

 


很好,软件包集成好了,下面我们来对硬件编译进行配置。

这个命令会进行检查编译环境,若可进行编译,没有什么依赖的错误,就会生成一个默认的编译配置文件。如果提示出错不用着急,他提示缺什么包你就装什么就好了,参照上一篇教程。

现在我们来开始配置硬件平台:

如果你顺利的话会看到下面的配置画面:

make-menu-config

下面来简单介绍下一些常用的选项:

Target System,是芯片型号,我要编译的刚刚好是AR9341的芯片,不用改了;一般TP-link,水星,迅捷这些都是AR芯片(其实大家都知道这三家是同一家公司,只是挂的招牌不同),不过现在AR被高通收购,新出的都是高通了,还有廉价好使的MTK。

选完芯片型号之后,我们选Target Profile(硬件配置文件)。Subtarget这个一般不用选,这个是区别那些非主流的NAND Flash的……Target Profile里面是众多路由器的型号,选好你的路由器型号就OK了。这里的路由器型号都是国外的,包括TP的产品也是海外版,配置也高一些(看TP-link多爱国),找不到自己要编译的型号再正常不过了,那么该怎么办呢,你可以搜索一下你的路由的拆机图,看看CPU是什么,然后跟这个CPU相同的TP型号是什么,选那个就对了。搜索的时候还要注意路由器是区分硬件版本的,不同硬件版本用的CPU可能都不同,不过一般硬件版本越高已经做工越缩水越省钱就对了。比如我的路由是FW300R V4,通过搜索我得知是AR9341的芯片:

FWchaiji

通过搜索得知固件的话是MW300R/TP 841N通用:

9341

那么我们就选841了:

Taget-Profile


Target Images这个是生成固件的格式,一般我们用默认的squashfs格式就ok了。SquashFS是一套基于Linux内核使用的压缩只读文件系统。

下面针对一些常用的基本设置讲一下:

LuCI是路由器的web界面,必不可少啦

(注:Y和N,空格,是选择与否的快捷键,【*】表示包含,【M】表示只编译不包含,当一些软件包被选择的时候,相关依赖的软件包也会被自动选上,并且取消该软件包的选择并不会自动取消这些软件包的被选择状态。打“/”斜杠会弹出搜索框,可以搜索你想要的包或者选项的位置)

有了LuCI界面当然还要有中文包啦,

旧版本的代码是在:

新版本的代码是在:

LuCI里面还有很多好玩的东西,像Themes(主题)啦,Applications(应用软件)啦,这里就不一一介绍。

添加复位键(恢复出厂设置)的支持:(新版本的代码貌似自动集成了,不用选)

这样下来基本差不多了,可以开始编译系统了,退出保存save之后,我们开始编译:

别急,我们先来做点东西……

在一个不是代码的目录里面新建一个dl文件夹,例如在/home/username下面,新建一个dl文件夹:

然后我们新建一个到源代码根目录的dl文件夹的软连接(软连接你可以理解为快捷方式):

软连接的命令格式是ln -s 源文件 连接文件。注意一定要使用绝对路径,要不然会产生很多错误。

这样你的源代码目录下面就有一个dl文件夹的软连接了。

为什么要这样做呢,因为在编译过程中要下载很多乱七八糟的源代码包,下载的东西都会保存在dl文件夹,而且下载的过程一般都比较艰辛,如果一不小心你把dl文件夹给删了(例如执行了一些神奇的make xxclean命令),那就哭了不是,所以我们把这个dl文件夹放出来外面比较安全~~╮(╯▽╰)╭而且你要编译别的版本的openwrt的时候,这个dl文件夹可以复用,省去很多包的下载时间和磁盘空间。

然后呢,我们还是不要着急编译,相信我……

我们先打这条命令下载好所有需要的软件包,编译过程中就不会提示与下载有关的错误了(国内的渣网络你懂的,编译大半天一个软件包无法下载你又得重新来了你就哭吧)

这里的V=s是显示详细信息的意思,有助于我们在下载失败的时候发现错误和找到正确的下载链接。很多时候,虚拟机下载的很慢或者下载失败,这个时候我们就需要把下载链接复制出来,使用下载工具(QQ旋风,百度云盘,迅雷等)来下载好复制进去dl文件夹。注意放进去之前要按下Ctrl+C来停止终端下载先。比如这个下载很慢很慢的linux内核源码包(点击放大):

linuxkendl

卧槽你看,这速度,几十kb一秒,下到什么时候!于是我把下载链接复制出来,打开了我破解版的QQ旋风,下载就能彪到2MB/s(我的软件下载栏目有)

lazy

一些被墙掉的下载链接怎么办?要么挂代理,要么就用软件包的名字去搜其他地方的下载链接下一个一模一样的回来……

虽然我知道下载的过程比较艰辛……我假设你已经下载完了,我们打下这句命令来编译:

这里解释下,-j的意思是使用多核CPU进行编译,这样编译速度会加快,但是有一定几率出现奇怪的错误,-j后面接的是CPU的核心数+1,本来四核CPU应该使用-j 5的,为了稳定,我还是- j 4吧。如果你的是其他核心数量的CPU自己修改下。V=s跟上面一样,是输出编译信息的意思。

第一次编译花的时间会很久很久,编译完成后在源代码的bin目录下会找到你的型号的固件和生成的ipk软件包。这个只是一个基本的系统,很多东西需要修改和定制,也有可能因为你软件包选的太多导致超出了所选的硬件配置文件的flash定义大小导致生成失败等等,这个下次再说吧,今天就写到这里了~~(╯‵□′)╯︵┻━┻

 


原文链接:https://03k.org/openwrt-guide2.html

本站博文无特别声明均为原创,转载请注明原文链接。本站软件均搜集自互联网,供学习研究之用,请下载后24小时内删除。

疑问OR交流点我加QQ群喵喵喵!


  1. 小quan Google Chrome 47.0.2526.106 Windows 7 x64 Edition

    其实却是很需要博主那种可以写技术文章连鸡毛蒜皮都写出来的风格,粗口啊什么的爆出来都可以,也可以话痨到说你所想说,估计你也是在校大学生吧,我也是零碎的学openwrt,可是这东西色涉及的太广,很难有一套全面又兼容性强的教程符合我这些小白,其实不断挖坑补坑。挖坑再不坑。最后看问题才明了

    回复
    1. kissshot Google Chrome 45.0.2454.101 Windows 7 x64 Edition

      本来打算一直写下去的……然后发现……自己懂的还是不够多……然后因为懒就没填坑……_(:3」∠)_

      回复
  2. jiyuejie Google Chrome 46.0.2490.76 Android 4.2.1

    写得非常好,也非常详细,真的是受益匪浅,正在学习编译,非常感谢您的辛勤和无私!

    回复
    1. kissshot Google Chrome 45.0.2454.101 Windows 10 x64 Edition

      谢谢,惭愧惭愧,忙于考试,好久没更新了。

      回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注