LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4189|回复: 12

省钱的嵌入式设备.. 一步一步 CLFS. MIPSEL

[复制链接]
发表于 2008-4-18 02:49:49 | 显示全部楼层 |阅读模式
想学习嵌入式,可惜硬件基础太差。连单片机都搞不清楚怎么个回事,就
别说从单片机到ARM的转变了...

可是并不能说无法学习嵌入式的其他些东西。

熟悉ARM、Linux嵌入式系统的移植,内核缩减,驱动程序编制,Linux下应用程序开发。

这个是某公司在招聘人员方面的要求。

这个没要求 雪中浪子 那个 硬件级别的水平,完全是软件级别的。(真诚的瞻仰下高手们)

我现在自己在学习的东西就是 LINUX嵌入式系统的移植,内核缩减。

至于 驱动程序的编制,LINUX下应用程序开发那个是后话了。

先说说我是怎么认识这个东西的。

过年用无线网卡曾网---了解无线路由器--发现很多路由器是 基于LINUX。
和网络关系起来了,我的兴趣就来了.

一找不要紧,一堆一堆的。其中 以思科旗下 LINKSYS品牌的路由器 为主要产品(自己GOOGLE吧,否则我太罗嗦了)。
买了思科 WRG54G V3.1后开始外围折腾了--- 先是刷 DD-WRT和OPENWRT为代表的LINUX系统,然后是根据国外一些文章来给这个设备添加 SD卡,去外面加悍内存。
然后通过taobao卖了设备,又购入了一个带 USB口的 无线路由器。。。

开始折腾软件了。 开始用 OPENWRT的“发行版本”。

突然感觉快毕业了(其实一直都有这种感觉,只是觉得嵌入式终于是我的选择目标了!只是来的太晚了!! 遗憾阿!!!)得找工作了阿! 那么为什么不能自己移植个 LINUX上去跑起来呢??

说干就干,开始找资料了。 有本《构建嵌入式 LINUX系统》,坚果出品必属精品!
当当买下,又在网上找了中文,英文电子文档先看着。大概知道怎么回事了。

还好,我的linux系统是长期驻守在我的硬盘里面的(开机默认进linux

哦!糟糕,按照 building embedded linux systems 的指示 我卡在了 创建glibc 和 uclibc上面.我又按照书上提示,更换了很多工具的版本。 依旧失败告终.....

使用LINUX就折磨自己,疯狂google,疯狂搜寻各大BBS.

通过搜索MIPS,找到了龙芯论坛。看精华帖子,找到了 linuxsir原帖连接。。。
感慨下,还是linuxsir是大本营!!
发现我的这种想法叫做 CLFS .  原来,折磨自己的方式就是 LFS。

还好,我还稍微有点优点,就是基本能全文遍历...
找到了CLFS的家, Cross-Compiled Linux From Scratch 。 我要找的分支就是embedded. 下载文档,先阅读遍。
嘿嘿!真详细(虽然还是有很多地方看不懂,但是步骤有个大概了)。

按照手册来做。 又错了.... 建立交叉编译环境没问题(也不能完全肯定),在config内核过后,要make .bin了(Installation of the kernel),有个很严重的错误---
  1. clfs:~/mips-wrt/patch/all/linux-2.6.20.1$ make ARCH=mips CROSS_COMPILE=${CLFS_TARGET}- vmlinux.bin modules
  2.   CHK     include/linux/version.h
  3.   CHK     include/linux/utsrelease.h
  4.   CHK     include/linux/compile.h
  5.   GEN     .version
  6.   CHK     include/linux/compile.h
  7.   UPD     include/linux/compile.h
  8.   CC      init/version.o
  9.   LD      init/built-in.o
  10.   LD      .tmp_vmlinux1
  11. mipsel-unknown-linux-uclibc-ld:arch/mips/kernel/vmlinux.lds:37: syntax error
  12. make: *** [.tmp_vmlinux1] Error 1
复制代码


这种级别的错误我是一点办法也没有了(如果是强人搞定的话,我觉得怎么也得自己能些编译器吧!) 发贴子去问问有人经历过没有... 答案是 没。
IRC--没。 google--没{(有人有相似错误,但是完全牛头不对马嘴) 或许我挖掘的还不够深入,google的水平还差远了}

看来还是得自己解决了,从最简单的做起,沿着别人的路走。

去了openwrt的开发者论坛,看看他们是怎么做的。
哦!!一看! 他们环境完全是自动的,只需要 你配置下 处理器等稍微细节的东西就直接能出来 可以运行于 设备上的固件了!!
(本来要借鉴下他们的方法,发现自己功力根本不够,国外那些人都是脚本王子+编程达人,能稍微看明白点怎么回事就不错了,想自己搞成一样的环境 就不是耍耍嘴皮子能搞定的了。) 看来,我还是老老实实的,别想一步登天了,下载他们的patch吧,自己手工来搞吧,对自己也有好处。

按照手册的概念,终于出来了 一个 令自己也觉得拿不出手的 .bin了。

而且有很多细节工作没有作。
先写这么多废话,我的二楼会写出 详细 生成.bin 步骤(等觉得能拿出手来的时候会给)

PS: 有个人买不起ARM设备的同学,对嵌入式移植等事情感兴趣的,大家一起来折腾,我自己实在是能力有限,多一个人多一条思路吗。

为了不产生不必要的麻烦,请同学 理解我,我信奉 不懂linux不要紧,但是要懂 UNIX/linux 沉默是金。 (有人疑问这句话,我希望大家能往好的方面想.



还是先完善下 一楼的 思路吧。

今天早上起来开始继续。
继续再看看 《building embedded linux system》

按照 书上的话,和我自己的理解,认为 : 移植内核难点在于 config 的配置,要非常清楚里面每一个选项的意义,出错是不可避免的,关键是自己要会找常规错误,然后在搜索patch或者自己写。 而前提是 交叉编译环境 必须要建立好! 不能完全信奉lfs手册,不一定全对,多实验(很耗时间,但是很有用-- 明白编译原理最好,不明白也要走两遍熟悉下!)

已经建立内核了的话就已经 验证了交叉开发工具链了。
书的原话是 : 建立内核让我们能够实际测试前面搭建的 交叉开发工具链(cross toolchain) 如果前面建立的工具能够成功编译出可用的内核,着代表其他所有的软件建立应该都没有问题。 当然,应该下载源码为target建立内核,以便验证可用性。

最后一句话认为最有用: 事实,能够正确建立,已经具有正面意义了。 :)


PS: 早上接到电话,考试的 JUNIPER CIA-ER 证书已经到手了。 125美元(通过一些手段免费考的,不过现在已经没有免费了,只能得到50%的优惠)


继续写   2008-04-11

如果有想 整这个的同学请看看附件,是我建立内核的 总步骤。

还是先说的外围的,就是我买的设备是 贝尔金的 7231-4P
taobao买的, 185 元 带运费。 4M 16M的大小, MIPSEL BCM4712  200Mhz
一个无线网卡(BCM,有点垃圾) ,一个交换芯片,5个RJ45, 一个USB。 若干
GPIO点,可以自行外接东西,比如 SD卡, 昨天在 梦·孤独之心(QQ) 玩,看到老外有人用GPIO点外接 LCD屏幕(NOKIA 33XX 系列的液晶屏)。 7231-4P也应该有I2C总线,(以前我买的WRT54G-V3.1 有I2C点,老外已经标出,就是没USB。)

今天先写这么多。


再接着写 2008-04-18  02:44分

TAG: MIPSEL CLFS wireless

#################################
半个月前,已经 构建了 交叉编译环境,(gcc-4.2.3 + uclibc0.9.29 + Binutils-2.18)

交叉编译是为了移植内核做工作,内核目前移植的是 2.6.24
目标板的配置是 博通 4712KPB(mipsel) 4MB ROM, 16MB RAM , 串口(可以通过连接HOST 看到启动过程) JTAG接口(用来上传 固件) 交换芯片 ADM6696L, USB1.1 规格.
无线芯片由于有个屏蔽罩,没拆开看, 根据官方规格,支持125M 速率. 可以肯定也是博通的芯片
(说句题外话,博通的无线网卡要么是硬件设计问题,要么是软件问题,无线网络速率到达 1.5MB/S后CPU占用率 100%,
有线连接10MB/S CPU占用率极低,根据个人经验来看,认为是硬件问题,和螃蟹卡一样,都是占IRQ严重的家伙!鄙视!)


以下主要是比较详细写出如何构建 交叉编译环境和 busybox的配置, 至于kernel的配置目前没研究明白,所以期待大家一起完成.真的是很期待.难道大家都只是玩 ARM 吗!!??

此文档是建立在 Cross-Compiled Linux From Scratch - Embedded - Version SVN-0.0.1-20080109-wrt (以下简称CLFS-WRT)基础之上. 在此之前是依靠 构建嵌入式LINUX系统(building embedded linux system)这本书

来纯手工建立的,多次死在了 uclibc上面. 在没有搞清楚./configure 的参数的情况下,乱来是必死的.看来,环境变量,./configure参数是非常重要的!而且makefile 的机制是必须弄明白的!!

否则就不会出现我这个血泪教训. 再次感谢  tekkman.cublog.cn 博客的主人,他写的 那段话非常好,可惜,我没严格执行..

#####################################################################
#########
############################################################
原话是 : 这几天忙着在Fedora
7下建立ARM-Linux的交叉编译环境。
一开始参考了《构建嵌入式Linux系统》,这是一本很经典的书。上面介绍了建立ARM-Linux的交叉编译环境的许多知
识,建立的原则和方法。我一开始想按照上面的一般方法,建立一个自己的、
最新的交叉编译环境。但是
,试了才知道这个过程是一个繁琐、耗时的工作。对于没有编译原理知识的我来说,更是耗时又毫无意义。引用《嵌入式设计及Linux驱动程序开发指南——基于ARM9处理器

第2版)》的原话:“在这项工作上浪费时间似乎没有任何意义,我也是这么认为的,”。由于在公司做事,时间不多,最后,我利用crosstool-0.43,自动完成
了这项工作。在是否有必要自己建立交叉
编译环境的问题上,我建议:如果你是一个学生,建议你认真学习编译原理、Linux和GNU的编译器原理,再一步一步的自己建立交
叉编译环境(学生比较有时间,少泡MM,少玩游戏,时间就挤出来了。
好好学习,以后MM来泡你,别人玩你编的游戏。)。如果你是程序员(不是交叉编译器的开发者),建议
不要在这上面浪费时间了,赚钱要紧,把这个作为业余爱好吧!

################################################
##############################
##################
经过多次测试,在SUSE10.3-GM的发行版本下,完全按照 CLFS-WRT
手册,是无法成功建立交叉编译环境,更别说编译内核了.自己测试出来的较新的搭配,结合
OPENWRT开发项目的PATCH来完成(一提全是泪啊.....)

请取得本文作者同意的情况再进行转帖.谢谢.




工作流程.

1 安装linux发行版+相关开发套件  (不在此讨论)

2 构建交叉编译环境. 目前比较完善,暂时没发现明显错误.

3 建议 rootfs(我的翻译是 根文件系统 ) 目前没有很明确这个步骤,认为这个相对要简单些,有 坚果的 构建嵌入式linux系统和 CLFS-embedded-mipsel-wrt手册来搞,(FHS)

4 编译软件给linux kernel,busybox-1.9.1 Iana-2.20

5 编译安装内核.  (这里我没有做好,由于我的目标板是4MB ROM,而 文件系统打包必须 小于3.5M,我打包出来的是 4.5MB,所以缩减的还不够. 打包已经包括 前面4 项步骤. busybox已经控制在716kb,问题出在了kernel上.

6 上传 固件 到目标板上.只要前面5步OK了,这一步就很简单了,所有硬件的制作都是有比较详细的文档和图片.在这里要感谢 重庆大学 罗孟宇,雪中浪子,恍然一悟等同学 一些必要的帮助.





说了半天,大家都以为我是来练嘴了,哪么就上"硬"货了(虽然很"软"



//先设置 环境目录


$ export CLFS=/home/clfs
# install -dv ${CLFS}
//添加clfs用户名,用户组
# groupadd clfs
# useradd -s /bin/bash -g clfs -m -k /dev/null clfs

# passwd clfs

# chown -Rv clfs ${CLFS}
//切换到 clfs
# su - clfs

//设置登陆 clfs 用户的bash环境
$
cat > ~/.bash_profile << "EOF"
exec env -i HOME=${HOME} TERM=${TERM} PS1='\u:\w\$ ' /bin/bash
EOF

$
cat > ~/.bashrc << "EOF"
set +h
umask 022
CLFS=/home/clfs
LC_ALL=POSIX
PATH=${CLFS}/cross-tools/bin:/bin:/usr/bin
export CLFS LC_ALL PATH
EOF

$ source ~/.bash_profile

// 建立 rootfs一些必要目录
$ mkdir -pv ${CLFS}/{bin,boot,dev,{etc/,}opt,home,lib/{firmware,modules},mnt}
mkdir -pv ${CLFS}/{proc,media/{floppy,cdrom},sbin,srv,sys}
mkdir -pv ${CLFS}/var/{lock,log,mail,run,spool}
mkdir -pv ${CLFS}/var/{opt,cache,lib/{misc,locate},local}
install -dv -m 0750 ${CLFS}/root
install -dv -m 1777 ${CLFS}{/var,}/tmp
mkdir -pv ${CLFS}/usr/{,local/}{bin,include,lib,sbin,src}
mkdir -pv ${CLFS}/usr/{,local/}share/{doc,info,locale,man}
mkdir -pv ${CLFS}/usr/{,local/}share/{misc,terminfo,zoneinfo}
mkdir -pv ${CLFS}/usr/{,local/}share/man/man{1,2,3,4,5,6,7,8}
mkdir -pv ${CLFS}/cross-tools{,/bin}
for dir in ${CLFS}/usr{,/local}; do
  ln -sv share/{man,doc,info} ${dir}
done

$ ln -svf ../proc/mounts ${CLFS}/etc/mtab

$ cat > ${CLFS}/etc/passwd << "EOF"

$

cat > ${CLFS}/etc/group << "EOF"
root:x:0:
bin:x:1:
sys:x:2:
kmem:x:3:
tty:x:4:
tape:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
EOF

$ touch ${CLFS}/var/run/utmp ${CLFS}/var/log/{btmp,lastlog,wtmp}
$ chmod -v 664 ${CLFS}/var/run/utmp ${CLFS}/var/log/lastlog
//这个文件是 打包后的格式使用软件.具体如何使用没认真研究,只要是brcm47xx CPU的无线路由器,都可以使用trx结尾的格式.  这个我可能理解的不正确,请知道的告知我.
$ gcc trx.c -o trx
$ cp trx ${CLFS}/cross-tools/bin

//不知道这个是干什么的.
$ gcc addpattern.c -o addpattern
$ cp addpattern ${CLFS}/cross-tools/bin


// jffs2格式创建工具
$ make mkfs.jffs2
$cp mkfs.jffs2 ${CLFS}/cross-tools/bin

//我目前没想明白,这个到底在那个步骤使用....  
$ make
$ cp bcm43xx-fwcutter ${CLFS}/cross-tools/bin

// 环境变量和目标板 的CPU规格 (我的无线路由器是 mipsel)
$ export BUILD="-mabi=32"
$ export CLFS_TARGET="mipsel-unknown-linux-uclibc"
$ export CLFS_MIPS_LEVEL="1"


$
echo export CLFS_HOST=\""${CLFS_HOST}\"" >> ~/.bashrc
echo export CLFS_TARGET=\""${CLFS_TARGET}\"" >> ~/.bashrc
echo export CLFS_MIPS_LEVEL=\""${CLFS_MIPS_LEVEL}\"" >> ~/.bashrc


*********************************************************
//这个软件包很重要!!! 测试的时候是死在他上面过2次.
%%%%%%%%%%%%%%%%   Cross Binutils-2.18 &&&&&&&&&&&&&&&&&&&&&
//补丁会以后续的方式来给出的,所有的patch都是 openwrt项目的.

$ patch -Np1 -i ../binutils-2.18-branch_update-3.patch
$ patch -Np1 -i ../binutils-2.18-posix-1.patch

$
../binutils-2.18/configure --prefix=${CLFS}/cross-tools --target=${CLFS_TARGET} --with-sysroot=${CLFS} --disable-nls --enable-shared --disable-multilib

// -j2的参数是利用双核CPU. 其中还有一段小故事,稍后有空给大家讲讲.

$ make configure-host -j2 //沉默是金
$ make -j2                                                                 //沉默是金
$ make install

$ cp -v ../binutils-2.18/include/libiberty.h ${CLFS}/usr/include
//查看下 弄出来东西没.
$ ls -la ~/cross-tools/bin/

************************************************************
-rwxr-xr-x 1 clfs clfs   13850 Apr 17 22:39 addpattern
-rwxr-xr-x 1 clfs clfs   39149 Apr 17 22:41 bcm43xx-fwcutter
-rwxr-xr-x 1 clfs clfs  130728 Apr 17 22:52 mipsel-unknown-linux-uclibc-addr2line
-rwxr-xr-x 2 clfs clfs  253485 Apr 17 22:52 mipsel-unknown-linux-uclibc-ar
-rwxr-xr-x 2 clfs clfs 1510755 Apr 17 22:52 mipsel-unknown-linux-uclibc-as
-rwxr-xr-x 1 clfs clfs  111909 Apr 17 22:52 mipsel-unknown-linux-uclibc-c++filt
-rwxr-xr-x 1 clfs clfs  509347 Apr 17 22:52 mipsel-unknown-linux-uclibc-gprof
-rwxr-xr-x 2 clfs clfs 1931420 Apr 17 22:52 mipsel-unknown-linux-uclibc-ld
-rwxr-xr-x 2 clfs clfs  173431 Apr 17 22:52 mipsel-unknown-linux-uclibc-nm
-rwxr-xr-x 2 clfs clfs  704023 Apr 17 22:52 mipsel-unknown-linux-uclibc-objcopy
-rwxr-xr-x 2 clfs clfs  779072 Apr 17 22:52 mipsel-unknown-linux-uclibc-objdump
-rwxr-xr-x 2 clfs clfs  253484 Apr 17 22:52 mipsel-unknown-linux-uclibc-ranlib
-rwxr-xr-x 1 clfs clfs  502147 Apr 17 22:52 mipsel-unknown-linux-uclibc-readelf
-rwxr-xr-x 1 clfs clfs  133358 Apr 17 22:52 mipsel-unknown-linux-uclibc-size
-rwxr-xr-x 1 clfs clfs  133318 Apr 17 22:52 mipsel-unknown-linux-uclibc-strings
-rwxr-xr-x 2 clfs clfs  704030 Apr 17 22:52 mipsel-unknown-linux-uclibc-strip
-rwxr-xr-x 1 clfs clfs  101359 Apr 17 22:40 mkfs.jffs2
-rwxr-xr-x 1 clfs clfs   13795 Apr 17 22:38 trx
***********************************************************

&&&&&&&&&&&&&&&&&&&&&&&& uClibc-0.9.29 Headers &&&&&&&&&&
//关于正则表达式的使用 我根本不懂其法,就是复制粘贴 CLFS-WRT手册上面的.
$
cp Makefile{,.orig}
sed -e 's/$(LN) -fs/cp/g' Makefile.orig > Makefile
for file in `find libc/sysdeps/linux -name Makefile`; do
    cp $file{,.orig}
    sed -e 's/$(LN) -fs/cp/g' -e 's@../libc/@$(TOPDIR)libc/@g' \
        $file.orig > $file
done

$ make defconfig ARCH=mips
$
cp .config{,.orig}
sed -e "/^KERNEL_HEADERS/s:=.*:=\"${CLFS}/usr/include\":" \
    -e "/^SHARED_LIB_LOADER_PREFIX/s:=.*:=\"/lib\":" \
    -e "/^DEVEL_PREFIX/s:=.*:=\"/usr\":" \
    -e "/^RUNTIME_PREFIX/s:=.*:=\"/\":" \
    .config.orig > .config

$
UCLIBC_OPTIONS="DO_C99_MATH UCLIBC_HAS_RPC UCLIBC_HAS_CTYPE_CHECKED
    UCLIBC_HAS_WCHAR UCLIBC_HAS_HEXADECIMAL_FLOATS LDSO_PRELOAD_FILE_SUPPORT
    UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE UCLIBC_HAS_PRINTF_M_SPEC UCLIBC_HAS_IPV6
    UCLIBC_HAS_GLIBC_CUSTOM_PRINTF UCLIBC_USE_NETLINK UCLIBC_HAS_FTW"
for config in $UCLIBC_OPTIONS; do
    cp .config{,.orig}
    sed -e "s:# ${config} is not set{config}=y:" .config.orig > .config
done
UCLIBC_OPTIONS="UCLIBC_HAS_CTYPE_UNSAFE"
for config in $UCLIBC_OPTIONS; do
    cp .config{,.orig}
    sed -e "s{config}=y:# ${config} is not set:" .config.orig > .config
done
echo "UCLIBC_HAS_FULL_RPC=y" >> .config
echo "UCLIBC_HAS_REENTRANT_RPC=y" >> .config

$ make ARCH=mips menuconfig  //对照下自己的平台看看有什么明显错误

$ make headers

// cc1: error: unrecognized command line option "-mips32"
//cc1: error: unrecognized command line option "-mabi=32"
//:0: error: bad value (mips32) for -mtune= switch
//cc1: error: unrecognized command line option "-mips32"
//cc1: error: unrecognized command line option "-mabi=32"
//:0: error: bad value (mips32) for -mtune= switch
会出现这种错误,我目前不知道这个是错误有什么影响,没GOOGLE。

$
mkdir ${CLFS}/usr/include/bits
make PREFIX=${CLFS} install_headers

&&&&&&&&&&&&&&&&&&&&&  第一遍 GCC  &&&&&&&&&&&&&&&&

//补丁会打包给出.
100 103 200 203 204 205 300 302 303 304 306 {904 我实在看不懂他到底干什么就没打 },其他补丁是给ARM和VAR32的 patch,绝对不能使用。


$
mkdir -v ../gcc-build
cd ../gcc-build

$
../gcc-4.2.3/configure --prefix=${CLFS}/cross-tools \
    --host=${CLFS_HOST} --target=${CLFS_TARGET} --disable-multilib \
    --with-sysroot=${CLFS} --disable-nls --disable-shared \
    --disable-threads --enable-languages=c

$ make all-gcc -j2 //沉默是金

$ make install-gcc

&&&&&&&&&&&&&&&&&&&&&&&  TOOLchain variables &&&&&&&&&&&&&&&&&

export CC="${CLFS_TARGET}-gcc"
export CXX="${CLFS_TARGET}-g++"
export AR="${CLFS_TARGET}-ar"
export AS="${CLFS_TARGET}-as"
export LD="${CLFS_TARGET}-ld"
export RANLIB="${CLFS_TARGET}-ranlib"
export STRIP="${CLFS_TARGET}-strip"


^^^^^^^^^^^^^^^^^^^^^ uClibc 0.9.29 ^^^^^^^^^^^^^^^^^^^^
$
cp extra/Configs/Config.mips extra/Configs/Config.mips.orig
sed -e \
  "s:default CONFIG_MIPS_ISA_1:default CONFIG_MIPS_ISA_${CLFS_MIPS_LEVEL}:" \
  extra/Configs/Config.mips.orig > extra/Configs/Config.mips

$
cp Makefile{,.orig}
sed -e 's/$(LN) -fs/cp/g' Makefile.orig > Makefile
for file in `find libc/sysdeps/linux -name Makefile`; do
    cp $file{,.orig}
    sed -e 's/$(LN) -fs/cp/g' -e 's@../libc/@$(TOPDIR)libc/@g' \
        $file.orig > $file
done

$
cp .config{,.orig}
sed -e "/^CROSS_COMPILER_PREFIX/s:=.*:=\"${CLFS_TARGET}-\":" \
    -e "/^KERNEL_HEADERS/s:=.*:=\"${CLFS}/usr/include\":" \
    -e "/^SHARED_LIB_LOADER_PREFIX/s:=.*:=\"/lib\":" \
    -e "/^DEVEL_PREFIX/s:=.*:=\"/usr\":" \
    -e "/^RUNTIME_PREFIX/s:=.*:=\"/\":" \
    .config.orig > .config

$

UCLIBC_OPTIONS="DO_C99_MATH UCLIBC_HAS_RPC UCLIBC_HAS_CTYPE_CHECKED
    UCLIBC_HAS_WCHAR UCLIBC_HAS_HEXADECIMAL_FLOATS LDSO_PRELOAD_FILE_SUPPORT
    UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE UCLIBC_HAS_PRINTF_M_SPEC UCLIBC_HAS_IPV6
    UCLIBC_HAS_GLIBC_CUSTOM_PRINTF UCLIBC_USE_NETLINK UCLIBC_HAS_FTW"
for config in $UCLIBC_OPTIONS; do
    cp .config{,.orig}
    sed -e "s:# ${config} is not set{config}=y:" .config.orig > .config
done
UCLIBC_OPTIONS="UCLIBC_HAS_CTYPE_UNSAFE"
for config in $UCLIBC_OPTIONS; do
    cp .config{,.orig}
    sed -e "s{config}=y:# ${config} is not set:" .config.orig > .config
done
echo "UCLIBC_HAS_FULL_RPC=y" >> .config
echo "UCLIBC_HAS_REENTRANT_RPC=y" >> .config


$
echo "ARCH_ANY_ENDIAN=y" >> .config
echo "ARCH_LITTLE_ENDIAN=y" >> .config
echo "ARCH_WANTS_LITTLE_ENDIAN=y" >> .config

$
make ARCH=mips menuconfig  // 必须要保证你的config和你的平台相对应

$ make CC="${CC} ${BUILD}" -j2 //沉默是金

$ make PREFIX=${CLFS} install

^^^^^^^^^^^^^^^^^清除工具链值 …………………………………………
unset CC
unset CXX
unset AR
unset AS
unset LD
unset RANLIB
unset STRIP
…………………………………………………………………………

…………………………………………第二次GCC……………………

cd gcc-build

$
../gcc-4.2.3/configure --prefix=${CLFS}/cross-tools \
    --host=${CLFS_HOST} --target=${CLFS_TARGET} --disable-multilib \
    --with-sysroot=${CLFS} --disable-nls --enable-shared \
    --enable-languages=c,c++ --enable-__cxa_atexit \
    --enable-c99 --enable-long-long --enable-threads=posix

$ make -j2  //沉默是金
$ make install

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^

^^^^^^^^^^^设置工具链值…………………………………………………………
$
echo export CC=\""${CLFS_TARGET}-gcc\"" >> ~/.bashrc
echo export CXX=\""${CLFS_TARGET}-g++\"" >> ~/.bashrc
echo export AR=\""${CLFS_TARGET}-ar\"" >> ~/.bashrc
echo export AS=\""${CLFS_TARGET}-as\"" >> ~/.bashrc
echo export LD=\""${CLFS_TARGET}-ld\"" >> ~/.bashrc
echo export RANLIB=\""${CLFS_TARGET}-ranlib\"" >> ~/.bashrc
echo export READELF=\""${CLFS_TARGET}-readelf\"" >> ~/.bashrc
echo export STRIP=\""${CLFS_TARGET}-strip\"" >> ~/.bashrc
echo export BUILD=\""${BUILD}\"" >> ~/.bashrc
source ~/.bashrc

^^^^^^^^^^^^^^ Busybox 1.9.1 ^^^^^^^^^^^^^^^^^^

先patch,不完整测试,目前只是需要一个。

使用我的.config  经过仔细研读help,已经把busybox做的大小和  openwrt 7.9 神风敢死队版本的差不多,我比他多 100多KB,当然,您也可以再进行缩减.

$ make ARCH=mips menuconfig

$ make ARCH=mips CROSS_COMPILE="${CLFS_TARGET}-" CFLAGS="${BUILD}" -j2
//如果有出错信息,比如top.o出错了,那么尝试看看有其他关联性质没(help)或者去掉再make

$ make ARCH=mips CROSS_COMPILE="${CLFS_TARGET}-" CFLAGS="${BUILD}" \
    CONFIG_PREFIX="${CLFS}" install

$
cp examples/depmod.pl ${CLFS}/cross-tools/bin
chmod 755 ${CLFS}/cross-tools/bin/depmod.pl

^^^^^^^^^^^^^^^^^ 我调的 .config 编译出来的 busybox有716K大小………………………

………………………………………………………… IANA ^^^^^^^^^^^^^^^

$ make && make DESTDIR=${CLFS} install

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

^^^^^^^^^^^^^^^^^^^ Zlib^^^^^^^^^^^^^^^^^^^^^
一个patch

//这个可以不需要
$
cp configure{,.orig}
sed -e 's/-O3/-Os/g' configure.orig > configure

$ CC="${CC} ${BUILD}" ./configure --prefix=/usr --shared
$ make $$ make DESTDIR=${CLFS} install

$
mv -v ${CLFS}/usr/lib/libz.so.* ${CLFS}/lib
ln -svf ../../lib/libz.so.1 ${CLFS}/usr/lib/libz.so

*****************@@@@@@@@@@ Kernel !!! @@@@@@@@@@@@

//由于使用 GEDIT(一个GNOME的编辑器)打开了太多文本,手又哆嗦了下,脑子又迟钝开了,没保存,以下进程暂时丢失. 很快将在后续时间补出.

请取得本文作者同意的情况再进行转帖.谢谢.


一个人搞这个力量有限,希望 有一定linux基础知识的,志同道合的同学 来一起整. 联系电话 : 13#$6#@!37@!9$%^50!@~90#|#5

此文作者 : linux_pro
 楼主| 发表于 2008-4-18 02:54:19 | 显示全部楼层
有点晚了,精神有点恍惚,先写这么多,待续.
回复 支持 反对

使用道具 举报

发表于 2008-4-18 06:54:23 | 显示全部楼层
强悍,我第一个回复了,顶礼膜拜一个:)
回复 支持 反对

使用道具 举报

发表于 2008-4-18 20:43:35 | 显示全部楼层
不错,先顶再看
回复 支持 反对

使用道具 举报

发表于 2008-4-19 11:55:31 | 显示全部楼层
留名,支持!
回复 支持 反对

使用道具 举报

发表于 2008-4-19 15:19:04 | 显示全部楼层
我是新手 现你学习
回复 支持 反对

使用道具 举报

发表于 2008-4-20 01:16:02 | 显示全部楼层
一直在玩OpenWRT,多交流
还有这个贴子,貌似在重庆某大学的嵌入式论坛看过
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-20 10:57:56 | 显示全部楼层
这两天离开了学校,暂时无法补充剩余部分.

回复楼上的,重大哪个帖子是我发的.
回复 支持 反对

使用道具 举报

发表于 2008-4-22 21:15:53 | 显示全部楼层
LZ你的路由器还能加内存么?USB是1.1的还是2.0的?
回复 支持 反对

使用道具 举报

发表于 2008-4-22 21:27:19 | 显示全部楼层
LZ你的路由器还能加内存么?USB是1.1的还是2.0的?
回复 支持 反对

使用道具 举报

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

本版积分规则

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