找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 5968|回复: 8

freebsd平台编译openwrt

[复制链接]
本帖最后由 cleanwrt 于 2015-6-6 09:35 编辑

                       
最开始接触的是linux,用一叠软盘装slackware,当时一盒软盘10个,要用十几个软盘。后来用过一段时间sun工作站,还用solaris9维护过一个小型局域网。
   现在的ubuntu版本linux感觉隐藏的细节太多了,还是更喜欢简单的方式。相对于systemv的风格,更喜欢bsd风格。
   freebsdlinux在系统头文件定义和系统调用方面有些区别,在freebsd平台编译为linux平台准备的openwrt有很多地方需要修改。本文以frebsd10.1 amd64为例,记录编译过程中遇到的问题和解决办法。
    1、编译平台freebsd10.1csh
   2freebsd默认编译器为llvm,需要安装gcc编译器,选择gcc4.8
   3、安装依赖软件,参考http://wiki.openwrt.org/doc/howto/buildroot.exigence,很多软件和gentoolinux名称差不多,gentoo的作者和freebsd渊源很深的缘故,哈哈。另外可以参考macos x,这个系统和freebsd也有很多相似之处。
   4、在用户目录下建立bin-gun目录,在该目录下创建一些链接:   
awk@-> /usr/local/bin/gawk
c++@-> /usr/local/bin/g++48
cc@-> /usr/local/bin/gcc48
echo@-> /usr/local/bin/gecho
find@-> /usr/local/bin/gfind
g++@-> /usr/local/bin/g++48
gcc@-> /usr/local/bin/gcc48
getopt@-> /usr/local/bin/getopt
gmake@-> /usr/local/bin/gmake
ld@-> /usr/local/bin/ld
make@-> /usr/local/bin/gmake
od@-> /usr/local/bin/god
patch@-> /usr/local/bin/gpatch
sed@-> /usr/local/bin/gsed
stat@-> /usr/local/bin/gnustat
tail@-> /usr/local/bin/gtail
tar@-> /usr/local/bin/gtar
tr@-> /usr/local/bin/gtr
然后修改path,将bin-gnu设置为第一选择路径。
   以上为编译平台的准备。下面是编译过程,以及在编译时遇到的问题的解决。
下载openwrt源码:
gitclone git://git.openwrt.org/openwrt.git
下载安装package源码:
cdopenwrt
./scripts/feedsupdate -a
./scripts/feedsinstall -a
配置安装:
makemenuconfig
make

编译中遇到的软件包的问题:
编译pkg-config0.28
Makefile HOST_CONFIGURE_ARGS 选项添加--with-libiconv=gnu,否则内部glibc编译时会出错。

编译xz-5.0.5
出现swap3264未定义错误,测试5.0.x版本均有此错误,改为5.1.3alpha版虽可编译测试通过,但依赖其的mtd-utilssquashfs4无法编译。最终改为xz-4.999.9beta

编译cmake3.8.12
参考/usr/ports/devel/cmake/files,增加Source__kwsys__SystemInformation.cxx补丁。
cd/usr/bin
mvld ld.bsd
ln-s /usr/local/bin/ld ld
编译完cmake后改回来,以免影响其他程序。

编译过程中有时会显示找不到/bin/bash而出错退出,需连接:
/bin
ln-s /usr/local/bin/bash bash

编译package/libs/nettle
config.h:206:22:fatal error: alloca.h: No such file or directory
FreeBSD平台没有alloca.halloca定义在stdlib.h中。修改0003-Include-local-macros-in-nettle.m4-to-allow-regenerat.patch,替换之。

编译package/utils/busybox
scripts/basic/fixdep.cdocproc.c
两个文件中
#include<alloca.h>
替换为
#include<stdlib.h>
原因是FreeBSD中相关函数定义在stdlib.h中,
linux定义在alloca.h中。

编译utils/lua
src/Makefilefreebsd编译配置选项多了一个"host/100-no_readline.patch未能正确修改
        $(MAKE)all MYCFLAGS="-DLUA_USE_LINUX" $(RFLAG)"MYLIBS="-Wl,-E$(if     $(USE_READLINE), -lreadline)"
改为
        $(MAKE)all MYCFLAGS="-DLUA_USE_LINUX $(RFLAG)" MYLIBS="-Wl,-E$(if$    (USE_READLINE), -lreadline)"

编译feeds/luci/contrib/package/luci
/usr/local/bin/gtarc -C ../../.. . --exclude=.pc --exclude=.svn --exclude=.git--exclude='*.o' --exclude='*.so' --exclude=dist | tar x -C/usr/home/foo/openwrt_ai-br100_bb/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/luci/
/usr/local/bin/gtar:/dev/sa0: Cannot open: Operation not supported
/usr/local/bin/gtar:Error is not recoverable: exiting now
tar:/dev/sa0: Cannot open: No such file or directory
tar:Error is not recoverable: exiting now
需修改两处文件
feeds/luci/contrib/package/luci/Makefile
feeds/luci/contrib/package/luci-addons/Makefile
        $(TAR)c -C $(LUCI_TOPDIR) . \
                --exclude=.pc--exclude=.svn --exclude=.git \
                --exclude='*.o'--exclude='*.so' \
                --exclude=dist| \
                        tarx -C $(PKG_BUILD_DIR)/
改为
        $(TAR)-cf - -C $(LUCI_TOPDIR) . \
                --exclude=.pc--exclude=.svn --exclude=.git \
                --exclude='*.o'--exclude='*.so' \
                --exclude=dist| \
                        tar-xf - -C $(PKG_BUILD_DIR)/

多出用到/usr/bin/perl,需创建/usr/local/bin/perl到此的连接。

编译feeds/oldpackages/libs/mysql
mysql-5.1.73/include/my_global.h:
#include<alloca.h> 替换为#include<stdlib.h>
#include<crypt.h> 替换为#include<unistd.h>,注意不是rpcsvc/crypt.h
typedefunsigned long   ulong; 判断条件注释掉,使该定义有效。
mysql-5.1.73/libmysql/Makefile:
lnsl-network services library
OnFreeBSD, unlike Linux, libnsl functionality is included in libc. Soyou need to remove all references in the makefile to -lnsl.
mysql-5.1.73/libmysql/Makefile-lnsl 替换为-lc

编译feeds/oldpackages/libs/cyrus-sasl
cyrus-sasl-2.1.23/include/Makefile-lresolv 替换为-lc,原理同编译mysql




我的恩山、我的无线 The best wifi forum is right here.
这个必须赞。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

来自手机 | 显示全部楼层
高手啊,支持一下。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

虽然官方WIKI有,但是楼主的比较详细,如果可能建议更新到官方WIKI的中文页面上。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

好东西。建议楼主把合适的部分做patch提交到openwrt上去
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

use quilt to patch these files, then submit to openwrt.org.
or you will change these again and again.
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
不是只有我一个人对freebsd感兴趣,不寂寞,感动。{:soso_e100:}
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

牛掰,,,freebsd.....
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

能把openwrt中的linux内核换成bsd的吗?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-28 18:12

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表