Openwrt学习之路-(1-Openwrt clone and bulid)

题图:huitu

Openwrt clone and bulid

Openwrt是一个高度模块化、高度自动化的嵌入式Linux系统,拥有强大的网络组件和扩展性,常常被用于工控设备、电话、小型机器人、智能家居、路由器以及VOIP设备中。为了更加深入的了解Openwrt,我们从最直接的学习方式开始,clone源码、编译工程。

1.安装linux上的更新组件

为了支持openwrt的安装编译,在linux操作系统上需要安装以下的软件

$ sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext 
texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev git-core 
gawk libz-dev asciidoc libtool libssl-dev libssl0.9.8 xz-utils -y

2.从官网clone openwrt

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

这边克隆哪个版本由自己决定,我这边选择15.05稳定版。虽然trunk版本支持的硬件更多,但其不一定稳定,而且会经常更新,对开发固定的硬件开说就没必要了,需要时可以去寻找相应的版本。

clone好的工程如下:

/openwrt-15.05/openwrt$ ls
BSDmakefile  docs                LICENSE   README    staging_dir  toolchain
config       feeds.conf.default  Makefile  rules.mk  target       tools
Config.in    include             package   scripts   tmp

3.升级所有扩展软件源列表

./scripts/feeds update -a

这一步的结果是:产生$(TOPDIR)/feeds目录,存放的就是执行feeds.conf.default文件后的结果

src-git packages https://github.com/openwrt/packages.git;for-15.05
src-git luci https://github.com/openwrt/luci.git;for-15.05
src-git routing https://github.com/openwrt-routing/packages.git;for-15.05
src-git telephony https://github.com/openwrt/telephony.git;for-15.05
src-git management https://github.com/openwrt-management/packages.git;for-15.05

feeds.conf.default里面的路径可以自行修改,如https网址访问不到,则可改为git路径等。

4.安装所有扩展软件

./scripts/feeds install - a
这一步的结果是:在package目录中多了一个feeds目录,里面存放的子目录是到$(TOPDIR)/feeds目录的链接。注意:在Openwrt的TOPDIR/Makefile中,有如下定义:

   # update all feeds, re-create index files, install symlinks
   package/symlinks:
   $(SCRIPT_DIR)/feeds update -a
   $(SCRIPT_DIR)/feeds install -a

那么,可以想见,上述两个也可以合并为一步,即make package/symlinks

5.使用默认编译环境,检查是否能进行编译

make defconfig

这一步就编译环境的基础,如果这一步都没执行成功,说明clone的工程有问题,需要重新clone。

6.配置自定义的镜像配置

make menuconfig

对工程进行配置,这边就以小米的miwifi为基础来进行编译。在选择硬件平台时,我们需要知道该路由器的无线芯片,CPU芯片,然后选出对应的平台设备。
如下:

先选择Target System ---> (Ralink RT288x/RT3xxx)                  
然后      Subtarget ---> (MT7620 based boards)          
     Target Profile ---> (Xiaomi MiWiFi Mini)  
最后 Target Images  ---> (jffs2、squashfs)

这边为平台的首次搭建,其他配置就先不要选择,把上面四个选择好后,就保存退出。

7.编译镜像

make V=99

第一次编译可能需要花费很长的时间,根据你的网络而定,一般情况下大约是2~3个小时,最主要的是花费在下载源码的时间上,以后编译一般在半个小时左右就能编译好。

对于第一次编译源码的下载,我们可以在国内的一些镜像进行手动下载后,拷贝进dl/目录下,这样也可以加快一些编译速度,国内进行可以访问http://dl.openwrtdl.com/

8.编译完成之后,将会多出几个目录如下

编译后增加的目录包括:bin/、build_dir/、dl/、feeds/、staging_dir/。

编译好的工程如下:

/openwrt-15.05/openwrt$ ls
bin          Config.in  feeds.conf.default  LICENSE   rules.mk     tmp
BSDmakefile  dl         include             Makefile  scripts      toolchain
build_dir    docs       key-build           package   staging_dir  tools
config       feeds      key-build.pub       README    target

对于Openwrt的目录结构将在另外一篇"Openwrt directory structure"进行讲解。

9.make步骤分析

简单来说,一旦OpenWrt buildroot已正确配置,如指定目标平台和体系结构,用户空间包已经选择等, OpenWrt buildroot会通过以下步骤编译镜像:

  • 下载交叉编译工具,内核头文件等
  • 建立staging_dir/目录,这个目录是交叉编译工具链将被安装的地方,如果你想使用相同的交叉编译工具链用作其他目的,比如编译第三方应用程序,你可以找到在这个目录下找到交叉编译工具,然后使用arch-linux-gcc 编译你的应用程序
  • 创建下载目录dl/,tar包将下载到这里
  • 创建编译目录build_dir/,用户态的工具和影城包将被解压或者复制到这里来进行编译。
  • 创建目标目录build_dir/target-<arch>*/root-<arch>和目标文件系统架构,这本目录包含最终的根文件系统。
  • 安装用户态软件包到根文件系统和以适当的格式压缩整个根文件系统。最后根文件系统的固件镜像在/bin/<arch>/下生成。

Openwrt clone and bulid的分析就到这边,有感悟时会持续会更新。

注:以上内容都是本人在学习过程积累的一些心得,难免会有参考到其他文章的一些知识,如有侵权,请及时通知我,我将及时删除或标注内容出处,如有错误之处也请指出,进行探讨学习。文章只是起一个引导作用,详细的数据解析内容还请查看Linux相关教程,感谢您的查阅。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容