![](https://csdnimg.cn/release/download_crawler_static/7690473/bg3.jpg)
成都数维通信有限公司 www.nettap.com.cn
如何编译一个模块?以 helloworld 为例:
1. 在 package 目录下按规定创建相应的目录及书写相应的 Makefile。
2. 到顶层目录执行 make package/helloworld/prepare V=99, 将包配置到
menuconfig 中,并将 helloworld 的源代码拷贝到 build_dir 目录为接下来
编译做准备。(V=99 是打印出编译信息)
3. 执行 make menuconfig 在 base system 菜单下选中 helloworld 这个模
块。(*表示选中这个包并编译进文件系统,M 表示选中这个包并编译成模
块 ipkg 这种的包,通过 openwrt 的 opkg 命令可以在 target 上安装。)
4. 再执行 make package/helloworld/compile V=99,到 build_dir 目录
下编译这个包,如果在 Makefile 中定义了 installDev,还会在编译完之后
执行这个宏里面的命令,可以用来拷贝一些库和头文件等。
5. 再执行 make package/helloworld/install V=99 , 对 helloworld 编译出
来的一些头文件和库文件以及执行文件直接安装工作。
6. 如果要重新编译这个包可以执行 make package/helloworld/clean V=99
清除 build_dir 目录下的这个包。
编译过程解读
在此只讨论 openwrt 编译整个镜像的编译过程。Openwrt 编译过程可以分为
三个阶段:
第一个阶段是根据 target 目录下的平台配置信息编译编译过程中会用到的一些
host 工具和交叉编译工具链以及解压相应的 linux 源代码并把要引出的头文件拷贝一
份到 staging_dir 目录下以便编译模块的时候引用。
第二个阶段是编译 package 下的所有模块,首先编译 base-files 包,在
build_dir 目录下建立相应的根文件系统目录以便后面的模块的安装,之后才编译和安
装其它的模块到根文件系统目录。
第三个阶段是编译 linux 内核和制作文件系统。编译完之后的镜像保存在 bin
目录下面。