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安装机器)用的
menuconfig
Libraries选项中,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(一般编译过一次固件,就已经编 ...
随机推荐
- @RequestBody和@RequestParam区别
@RequestParam 用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容.(Http协议中,默认传递的参数就是applicati ...
- js数组排序,支持正反排序以及多维度排序
工作中遇到js数组排序问题,数组中存储的都是对象,于是就百度了下,利用别人的代码进行修改,最终完成可以倒序.反序,可以进行多维度排序的功能源码如下: /** * js数组排序 支持数字和字符串 * @ ...
- matplotlib画散点图,并在散点处打上相应标签
运行环境: py3.6 matplotlib 2.1.2 x = [2,4,6,7,8,5,4,3] y = [3,6,5,8,4,3,2,4] txt = ['我','今','晚','上','吃', ...
- MacOS下postgresql数据库密码的那些事
如果你是第一次玩postgresql数据库,你会发现你给role或者user明明设置了密码,但在登录的时候毛都不用输入,直接就进去了,怎么那么爽快!? 虽然爽快,但貌似不该这样啊. 其实这些都和一个重 ...
- ZooKeeper之(六)应用实例
6.1 Java API 客户端要连接 Zookeeper服务器可以通过创建 org.apache.zookeeper.ZooKeeper 的一个实例对象,然后调用这个类提供的接口来和服务器交互. Z ...
- Linux下文件的mtime/atime/ctime研究
概述 在Linux下,对于某一个文件或文件夹时间的描述有三种:文件修改时间mtime,文件访问时间atime,文件状态改变时间ctime.在Linux下无法获取到文件的创建时间,因为根本就没有保存这个 ...
- 计算机网络之动态主机配置协议DHCP
为了将软件协议做成通用的和便于移植,协议软件的编写者不会把所有细节都固定在源代码中,而是把协议软件参数化,这就使得在很多台计算机上使用同一个经过编译的二进制代码成为可能. 一台计算机和另一台计算机的区 ...
- android 自定义view之侧滑效果
效果图: 看网上的都是两个view拼接,默认右侧的不显示,水平移动的时候把右侧的view显示出来.但是看最新版QQ上的效果不是这样的,但给人的感觉却很好,所以献丑来一发比较高仿的. 知识点: 1.Vi ...
- Android app内存管理的16点建议
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiopshared memory(共享内存) Android通过下面几个方式在不同的Process中来共享RAM: 每一个app的proc ...
- Angularjs + Bootstrap 制作的一个TODO List
看了一个关于Angularjs的视频,视频内容讲解的是如何制作一款TODO list形式的SPA(Simple Page Application,单页面应用).为了增强理解,下面写了一篇文章,用以复习 ...