CentOS6 上OpenWRT交叉编译
目的不是为了编译固件,而是为了一个是编译可执行文件,放倒op的路由器上跑,另一个目的是安装一些开源软件折腾下(例如ss-lib),需要打包成 .ipk 格式
路由设备信息
erya@ERYA:~$ cat /proc/cpuinfo
system type : Atheros AR9341 rev 1
machine : Atheros DB120 reference board
processor : 0
cpu model : MIPS 74Kc V4.12
BogoMIPS : 266.64
wait instruction : yes
microsecond timers : yes
tlb_entries : 32
extra interrupt vector : yes
hardware watchpoint : yes, count: 4, address/irw mask: [0x0000, 0x0ff8, 0x0ff8, 0x0ff8]
isa : mips1 mips2 mips32r1 mips32r2
ASEs implemented : mips16 dsp dsp2
shadow register sets : 1
kscratch registers : 0
core : 0
VCED exceptions : not available
VCEI exceptions : not available
erya@ERYA:~$ uname -a
Linux ERYA 3.10.10 #10 Mon Sep 7 10:04:34 CST 2015 mips GNU/Linux
怎么交叉编译出一个可执行文件 ?
现在Centos上测试,需要特殊的GCC,也叫toolchain工具链 文档, 大部分的教程的做法都是自己下载源码来 编译工具链,比较漫长的过程。
只找到了14.07版本预编译的工具链,15版本已经不提供了, toolchain没写是Ubuntu还是哪个发行版本,测试没成功 官方的交叉编译步骤 ,看样子还是需要源码编译 toolchain,然后在编译相应的软件。
OP交叉编译好教材 编译可执行文件
centos openwrt 主要参考
openwrt feed是什么? feeds 中对应的是一个软件list地址,可以把这些软件编译到openwrt固件中,使得系统使用更方面。
如果我只想编译 toolchain? 在编译配置的时候
make menuconfig选择编译toolchainBuild the OpenWrt based toolchain,Advanced configuration options选择 gdb和 debugging symbols编译包下载慢怎么解决? 编译时候下载的包一般在 ./dl/ 目录下,这里有个国内收集好的下载地址, 可以在编译下载中断的时候,在这里下载那些下载不到的包放到 dl目录,正常情况下是会有几个包下载不了。
———————- Centos6 编译toolchain ——————
用的是dreambox版本测试,不要用root用来操作,麻烦的是下载慢,编译慢(大概5个小时)
yum install -y subversion binutils bzip2 gcc gcc-c++ gawk gettext flex
yum install -y ncurses-devel zlib-devel make patch unzip perl-ExtUtils-MakeMaker
yum install -y glibc glibc-devel glibc-static quilt ncurses-lib sed sdcc intltool sharutils bison wget
$ git clone git://git.openwrt.org/14.07/openwrt.git
$ cd openwrt
$ ./scripts/feeds update -a
$ ./scripts/feeds install -a
$ ./scripts/feeds list -s #查看feed源
$ make defconfig
$ make menuconfig #Target System,Subtarget
$ make V=s 2>&1 | tee build.log | grep -i error #等吧 很久
编译toolchain之后开始配置编译环境来编译 hello world,一种是编译成可执行文件,一种是编译成 ipk包。
直接编译可执行文件, hello.c放在 openwrt 根目录下
[lzz@orangleliu openwrt]$ cat hello.c
#include <stdio.h>
int main(void)
{
printf("Hello World\n");
return 0;
}
# 设置环境变量(可以写到文件中自动加载 如果LDCFLAGS,LD_LIBRARY_PATH文件夹为空,请看target-mips_34kc_uClibc-0.9.33.2)
export STAGING_DIR=/data/openwrt/staging_dir
export TOOLCHAIN_DIR=$STAGING_DIR/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2
export LDCFLAGS=$TOOLCHAIN_DIR/usr/lib
export LD_LIBRARY_PATH=$TOOLCHAIN_DIR/usr/lib
export PATH=$TOOLCHAIN_DIR/bin:$PATH
$ mips-openwrt-linux-gcc hello.c -o hello
[lzz@orangleliu openwrt]$ file hello
hello: ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1 ... #在路由上测试可以执行
如果编译需要依赖其他动态库,例如lua,native 平台只要
-llua就行了,交叉编译怎么做呢?- 是build toolchain时候没有选择liblua,重新选择后编译,发现 头文件在
staging_dir/target-xxx文件下,staging/toolchain-xxx下并没找到 lua.h等文件(配置有没搞懂的地方)
- 是build toolchain时候没有选择liblua,重新选择后编译,发现 头文件在
比如说编译时候少了一个库,每次需要增加的时候都要重新编译整个工具链,非常慢,怎么搞?
一个思路是利用编译的cache, openwrt中也有ccache,开发环境可以开启,
一个思路是只编译需要的部分,在 make menuconfig 选择到包,然后 类似
make package/network/utils/curl/compile V=s
编译之后生成的 build_dir 和 staging_dir 有什么不同?
build_dir 存放是源码解压之后的文件,使用他们来编译
staging_dir 编译好的工具,包,固件等
toolchain 是给host主机用的, target 是给目标主机(openwrt安装机器)用的
menuconfigLibraries选项中,module 和 build-in 的区别是什么?- module选择的时候显示M,表示只编译成ipk,并不打到固件中
编译好的 .ipk在哪里 ?
./bin/目录下, 例如./bin/ar71xx/packages/
Makefile编译ipk && 开源项目编译(例如tcpdump,nginx), 后续使用时记录
编译一个ipk
开源项目的第三方packages是最好的学习案例 https://github.com/shadowsocks/openwrt-shadowsocks 就不错
CentOS6 上OpenWRT交叉编译的更多相关文章
- CentOS6上无法启动NFS服务
CentOS6上无法启动NFS服务 1.系统环境 物理机:Windows 7(32位)旗舰版 虚拟机:CentOS 6.5 2.问题描述 安装好nfs应用程序之后,打算启动nfs服务,却出现以下的报错 ...
- Solr6.5在Centos6上的安装与配置 (一)
这篇文章主要是介绍在Centos6上Solr6.5的安装与配置. 一.安装准备及各软件使用版本说明: 1.JDK8,版本jdk1.8.0_121下载地址:jdk-8u121-linux-x64.tar ...
- 在centos6上实现编译安装lamp和wordpress,并编译xcache
author:JevonWei 版权声明:原创作品 软件环境: centos6.9 httpd-2.4.27.tar.bz2 apr-1.5.2.tar.bz2 apr-util-1.5.4.tar. ...
- 在CentOS6上配置MHA过程全记录
在CentOS6上配置MHA过程全记录 MHA(Master High Availability)是一款开源的MariaDB or MySQL高可用程序,为MariaDB or MySQL主从复制架构 ...
- 在CentOS6上利用PXE+Kickstart+Apache+DHCP实现无人值守安装
在CentOS6上利用PXE+Kickstart+Apache+DHCP实现无人值守安装 1.PXEServer:OS:CentOS6.9IP:172.16.25.69: (1)apache:# mo ...
- [svc]centos6上部署openvpn+gg二步认证
最近又发现个新的vpn: wireguard 为了满足员工在家办公的需求.需要 openvpn+gg方案 在centos6上部署openvpn 参考 1.安装前准备 wget -O /etc/yum. ...
- 在 CentOS6 上安装 GraphicsMagick-1.3.30
在 CentOS6 上安装 GraphicsMagick-1.3.30 1.简介: 1.1.在介绍 GraphicsMagick 前我们不得不先介绍下 ImageMagick: ImageMagick ...
- centos6上使用fpm打python2.7 rpm包并兼容python2.6
centos6上使用fpm打python2.7 rpm包并兼容python2.6 作者 运维小兵_加油 关注 2016.09.22 00:28 字数 501 阅读 45评论 0喜欢 1 工作中我们常常 ...
- OpenWRT交叉编译
对于当前不在OpenWRT repository中的软件,如果是用源码形式发布的,那么可以用OpenWRT Buildroot进行交叉编译. 首先编译好Buildroot(一般编译过一次固件,就已经编 ...
随机推荐
- java 反射机制 观点
反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧! 一,先看一下反射的概念: 主要是指程序可以访问,检测和修改它本 ...
- 如何joomla修改版权信息
1.在language\zh_CN目录下有一个zh-CN.mod_footer.ini文件,修改里面的内容: 2.具体模板的html\mod_footer目录下的default.php文件内(具体文件 ...
- 转:函数signal()
from:http://blog.sina.com.cn/s/blog_4b226b92010119l5.html 当服务器close一个连接时,若client端接着发数据.根据TCP协议的规定,会收 ...
- Spring动态切换多数据源解决方案
Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效提高系统的水平伸缩性.而这样的方案就会不同于常见的单一数据实例的方案,这就要程序在运行时根据当时 ...
- linux下安装apache(httpd-2.4.3版本)各种坑
博主的linux是ubuntu 14.04.3. 在安装apache最新版httpd-2.4.3的时候遇到各种坑. 先提供安装apache httpd-2.4.3所需要的包,博主已经整理好,下载地址: ...
- 利用LogParser将IIS日志插入到数据库
利用LogParser将IIS日志插入到数据库 上面的博文是定制一个计划任务来将log日志定时的导入数据库 下面这篇博文是用cmd指令将日志导入到一张sql表中,是一次性操作 Log P ...
- 【mybatis深度历险系列】mybatis中的动态sql
最近一直做项目,博文很长时间没有更新了,今天抽空,学习了一下mybatis,并且总结一下.在前面的博文中,小编主要简单的介绍了mybatis中的输入和输出映射,并且通过demo简单的介绍了输入映射和输 ...
- 剑指Offer——知识点储备-Java基础
剑指Offer--知识点储备-Java基础 网址来源: http://www.nowcoder.com/discuss/5949?type=0&order=0&pos=4&pa ...
- 设置 NSZombieEnabled 定位 EXC_BAD_ACCESS 错误
我们做 iOS 程序开发时经常用遇到 EXC_BAD_ACCESS 错误导致 Crash,出现这种错误时一般 Xcode 不会给我们太多的信息来定位错误来源,只是在应用 Delegate 上留下像 T ...
- Java进阶(四十五)java 字节流与字符流的区别
java 字节流与字符流的区别(转载) 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作 ...