概述
-
openwrt源码文件目录说明
- tools和toolchain:包含一些通用命令, 用来生成固件, 编译器, 和C库
- build_dir/host:临时目录, 用来储存不依赖于目标平台的工具
- build_dir/toolchain:储存依赖于指定平台的编译链
- build_dir/target:储存依赖于指定平台的软件包的编译文件, 其中包括linux内核, u-boot, packages
- staging_dir:编译目标的最终安装位置, 其中包括rootfs, package, toolchain
- package:软件包的下载编译规则, 在OpenWrt固件中, 几乎所有东西都是.ipk
- target:目标系统指嵌入式设备, 针对不同的平台有不同的特性, 针对这些特性, "target/linux"目录下按照平台进行目录划分, 里面包括了针对标准内核的补丁, 特殊配置等
- bin:编译完OpenWrt的二进制文件生成目录, 其中包括sdk, uImage, u-boot, dts, rootfs构建一个嵌入式系统完整的二进制文件
- config:存放着整个系统的的配置文件
- docs:里面不断包含了整个宿主机的文件源码的介绍, 里面还有Makefile为目标系统生成docs
- include:里面包括了整个系统的编译需要的头文件, 但是是以Make进行连接的
- feeds:扩展软件包索引目录
- feeds/packages:为执行./scripts/feeds install 之后的package
- scripts:组织编译整个OpenWrt的规则
- tmp:编译文件夹, 一般情况为空
- dl:所有软件的下载目录, 包括u-boot, kernel
- logs:如果编译出错, 可以在这里找到编译出错的log
-
三种方法编译openwrt定制固件
make menuconfig时选择
-
Build the OpenWrt Image Builder
-
Build the OpenWrt SDK
-
Build the OpenWrt based Toolchain
make后会在bin目录下生成ImageBuilder,Toolchain和SDK工具包
-
用ImageBuilder编译,用于灵活选择package。毕竟压缩的只读文件系统squashfs比可写的JFFS能省不少地方,可以用来把玩更多的package
-
用SDK编译,用于编译package仓库中没有的软件包,另外其中有配套的内核源码及头文件,编译缺失的内核模块也很方便
-
从源码编译,因为要重新编译cross-compile toolchians,下载内核和软件包的源码编译,导致这个过程比较耗时,用于上述两种情况搞不定的情况
openwrt只编译某一项示例:
# In ar71xx platform as an example tar xjf OpenWrt-SDK-ar71xx-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2.tar.bz2 cd OpenWrt-SDK-ar71xx-* # Create package directories mkdir package/utils # Clone Makefile git clone https://github.com/qianguozheng/nodejs-openwrt4 package/utils/nodejs5 # Select the package to be compiled Utilities -> nodejs # also chose any advanced options for compilation make menuconfig # Compile Package make package/nodejs5/{clean,compile} V=99
-
-
openwrt编译node库
-
勾选widora的language->node,编译过程中总是遇到这样或那样的错误,特别是libuv库无法编译通过。而一旦添加了node,便会自动添加libraries->libuv库(毕竟libuv就是nodejs的核心依赖库)
-
更新node源码包,删除原有的node包,使用github中源码包openwrt-node-packages
该源码包虽然指定的平台版本是
for trunk/openwrt-18.06/lede-17.01
,而widora是15.01
却依旧能编译通过,反而其中给定的for15.05源码包,其补丁编译补过不了;该包不需要依赖libuv,因此也不会自动添加libraries->libuv库,因此能编译成功 -
注意事项:在尝试使用mt7688平台时,按照以上node源码安装说明,并不需要勾选[*] MIPS FPU Emulator选项,但是在实际测试中,没有勾选这个选项后会出现
Illegal instruction
错误,令人百思不得其解。后搜到这篇大神的博客openwrt 编译node.js功能(解决Illegal instruction错误),试了一下加入 MIPS FPU Emulator选项,问题解决!这篇博客大神的问题分析思路很是值得学习,小白只会瞎折腾。
-
-
openwrt安装homebridge
node编译通过后,将固件刷入widora,使用npm install -g homebridge时,又出现如下错误:
npm ERR! Linux 3.18.29
npm ERR! argv “/usr/bin/node” “/usr/bin/npm” “install” “homebridge”
npm ERR! node v6.14.4
npm ERR! npm v3.10.10
npm ERR! path /root/.npm/homebridge/0.4.45/package.tgz.3471964756
npm ERR! code ENOSPC
npm ERR! errno -28
npm ERR! syscall open
npm ERR! nospc ENOSPC: no space left on device, open ‘/root/.npm/homebridge/0.4.45/package.tgz.3471964756’
npm ERR! nospc This is most likely not a problem with npm itself
npm ERR! nospc and is related to insufficient space on your system.
npm ERR! Linux 3.18.29
npm ERR! argv “/usr/bin/node” “/usr/bin/npm” “install” “homebridge”
npm ERR! node v6.14.4
npm ERR! npm v3.10.10
npm ERR! path npm-debug.log.1631127116
npm ERR! code ENOSPC
npm ERR! errno -28
npm ERR! syscall open
npm ERR! nospc ENOSPC: no space left on device, open ‘npm-debug.log.1631127116’
npm ERR! nospc This is most likely not a problem with npm itself
npm ERR! nospc and is related to insufficient space on your system.
npm ERR! Please include the following file with any support request:
npm ERR! /root/npm-debug.log-
看这bug估计是内核版本太低支持不了这么高版本的node以及安装所需空间不够,只能强行在pc上连homebridge一起编译
-
编译homebridge时,建议勾选的其他项:node + node-npm libavahi-compat-libdnssd + network->mosquitto
-
设置开机运行
chmod +x /etc/init.d/homebridge /etc/init.d/homebridge enable /etc/init.d/homebridge start
-
-
openwrt在Ubuntu与Mac环境下源码编译的差异
在MacOS上更容易爆出Bug,一般都是各种包不兼容的错误,而Ubuntu的兼容性非常好,因此强烈建议Ubuntu环境;在Mac上只能编译出node以及node-npm,无法编译homebridge,在Mac上折腾一周后,换Ubuntu一晚上就编译好了;在编译过程中的log中可以看出对linux内核有升级补丁
-
参考链接
Homebridge on LEDE/OpenWRT routers
从0开始的Homekit试玩
自制 HomeKit 兼容 LED 灯条和温湿计
路由器就是开发板
-
总结
- 固件编译起来非常费时间,一旦出现依赖库不兼容的问题很难解决,建议make menuconfig增添了某项功能编译通过后,打包成压缩包,然后再去添另外的功能,一旦编译错误无法解决还可以回滚,如果利用git工具应该会更方便
- 学会看编译错误结果,硬着头皮先去分析错误,通过google去解决,不要被大量的log吓到
- 学会使用github搜索开源包
最后
以上就是迅速老师为你收集整理的openwrt之源码编译node的全部内容,希望文章能够帮你解决openwrt之源码编译node所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复