青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

幽幽
 
posts - 51,  comments - 28,  trackbacks - 0
首先,制作交叉工具鏈的目的是為了給我的手機--MOTO ROKR E2編譯程序。
然后,順便學習一下嵌入式軟件的開發(fā)
先說一下,搞這個需要很大的耐心。
我用的硬件是Sempron3100+, 512MB內存, 編譯環(huán)境是windowsXP + vmware5.5 + gentoo,
在CUI下,花了大概20個小時才編譯完(我從晚上八點一直弄到第二天下午四點)。

1.
準備源碼:
 binuitls-2.17
 gcc-4.1.1
 glibc-2.5
 glibc-ports-2.5
 
以上都可以在gnu.orgftp上下載
 
默認glibc不支持其它處理器, glibc-ports是支持其它處理器架構的補丁
 
另外還有kernel,我使用最新的2.19.1(kernel用于提供編譯頭文件)

2.
準備補丁:
 
這個可以在cross-lfs.org上面根據(jù)它的指南下載,我使用了下面的補丁:
 Binutils Branch Update
 Binutils Posix Patch
 GCC Cross Search Paths Patch
 GCC PR20425 Patch
 GCC Posix Patch
 Glibc Branch Update
 Glibc Cross-Compiling Hacks Patch
 Glibc Disable linking with libgcc_eh.a
 Glibc Localedef Segfault

 
準備編譯環(huán)境,我直接使用的debian(sid)并且所有包都是最新狀態(tài),另外需要安裝texinfo, gawk(注意mawk編譯glibc header時會有問題), bison, flex

4.
準備環(huán)境變量.我寫了一個pre.sh,所有相關內容都放里面
 set +h #
關閉bashhash功能,hash功能用來記憶系統(tǒng)中所有可執(zhí)行文件來避免查找path. 編譯時可能會增加新的同名可執(zhí)行程序在其它目錄下
 umask 022
 export CLFS_HOST="$(echo $MACHTYPE | sed "s/$(echo $MACHTYPE | cut -d- -f2)/cross/")"
 export CLFS_TARGET="arm-unknown-linux-gnu"
 export CLFS=/home/lizl/arm
 export LC_ALL=POSIX #
舊的libc2.2.4以下在LOCALE為其它時chroot回來可能會有異常
 export PATH=$CLFS/bin:$PATH

 # CFLAGS
CXXFLAGS對編譯時可能會有影響
 unset CFLAGS
 unset CXXFLAGS


5.
準備環(huán)境.執(zhí)行source pre.sh后執(zhí)行下面的操作:
 install -dv ${CLFS} #
創(chuàng)建目標目錄
 install -dv ${CLFS}/include
 install -dv ${CLFS}/usr/include

 
另外最好使用其它用戶身份去進行編譯的操作, 因為root可能會對系統(tǒng)造成破壞.建議創(chuàng)建一個clfs用戶和組專門操作(我是直接使用的root):
 groupadd clfs #
增加組
 useradd -s /bin/bash -g clfs -m -k /dev/null clfs #
創(chuàng)建用戶
 passwd clfs #
給用戶指定口令
 chown -Rv clfs ${CLFS} #
修改輸出目錄的權限
 CLFS
建議clfs帳號登錄時, 最好不要被系統(tǒng)中其它環(huán)境變量影響, 所以它在clfs帳號的~/.bash_profile里面寫入下面內容:
 exec env -i HOME=${HOME} TERM=${TERM} PS1='\u:\w\$ ' /bin/bash
 
因為我是root, 沒有修改.

 su - clfs #
切換到clfs用戶執(zhí)行操作

 
開始創(chuàng)建一些目錄. 這里我沒有創(chuàng)建, 因為我只需要gcc, binutilsglibc這三個

6.
編譯binutils:
 
下載binutils-2.17并解壓.
 
下載補丁:
 
注意安裝gcc bison flex texinfo
 
不然編譯過程會出錯

 
我編譯時報的錯是 missing makeinfo
 
然后安裝了texinfo還是不行
 
后面檢查makefile才發(fā)現(xiàn)bison等都沒有安裝

 patch -Np1 -i ../patch/binutils-2.17-posix-1.patch
 patch -Np1 -i ../patch/binutils-2.17-branch_update-1.patch

 binutils
建議編譯時在其它目錄編譯,所以我們創(chuàng)建binutils-build并在里面執(zhí)行操作
 mkdir -v ../binutils-build
 cd ../binutils-build

 
 
如果你在binutils-2.17執(zhí)行操作的話,那后面的make configure-host時可能會報錯
 
我因為報錯然后重做了一下干凈的解壓目錄重執(zhí)行

 
開始配置
 ../binutils-2.17/configure --prefix=${CLFS} \
  --host=${CLFS_HOST} --target=${CLFS_TARGET} --with-sysroot=${CLFS} \
  --disable-nls --enable-shared --disable-multilib

 
檢查看主機上的運行條件是不是符合
 make configure-host

 
編譯并安裝:
 make
 make install
 cp -v ../binutils-2.17/include/libiberty.h ${CLFS}/usr/include


7.
安裝內核頭文件:
 clfs
中是直接復制目錄, 我則是先make menuconfig然后修改一此事配置后才復制的

 clfs
中操作:
 install -dv ${CLFS}/usr/include
 cp -av include/{asm-generic,linux,mtd,scsi,sound} ${CLFS}/usr/include
 cp -av include/asm-arm ${CLFS}/usr/include/asm

 
我的操作:
 make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig

 
menuconfig里面load一個別人的2410的配置然后退出并保存
 cp -av include/{asm-generic,linux} ${CLFS}/usr/include
 cp -av include/asm-arm ${CLFS}/usr/include/asm

8.
安裝glibc的頭文件.
 
先把3.4的依賴去掉
 cd glibc-2.5
 cp configure{,.orig}
 sed -e 's/3.4/3.[0-9]/g' configure.orig > configure

 
然后解壓glibc-ports
 tar -jxvf ../glibc-ports-2.5.tar.bz2
 mv -v glibc-ports-2.5 ports

 
注意是解壓到當前目錄(glibc-2.5),不然執(zhí)行后面的configure時會報cpu不支持
 
然后開始準備編譯目錄, 同上, 我們也在其它目錄下進行編譯
 mkdir -v ../glibc-build
 cd ../glibc-build

 
為打開NPTL支持進行如下操作:
 echo "libc_cv_forced_unwind=yes" > config.cache
 echo "libc_cv_c_cleanup=yes" >> config.cache
 echo "libc_cv_arm_tls=yes" >> config.cache

 
然后把安裝路徑指定一下:
 echo "install_root=${CLFS}" > configparms

 
再執(zhí)行下面的編譯:
 CC=gcc ../glibc-2.5/configure --prefix=/usr --host=${CLFS_TARGET} --build=${CLFS_HOST} --with-headers=${CLFS}/usr/include --cache-file=config.cache
 make install-headers

 
由于awk語法兼容原因,如果安裝mawk的話上面的步驟會出錯, 安裝gawk則不會
 
有一些文件還沒有被自動復制過去, 需要手工復制:
 install -dv ${CLFS}/usr/include/bits
 cp -v bits/stdio_lim.h ${CLFS}/usr/include/bits
 touch ${CLFS}/usr/include/gnu/stubs.h
 cp -v ../glibc-2.5/ports/sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h \
 ${CLFS}/usr/include/bits

9.
安裝gcc第一次,這次是為了編譯交叉版本的glibcgcc,先打補丁
 patch -Np1 -i ../patch/gcc-4.1.1-posix-1.patch
 patch -Np1 -i ../patch/gcc-4.1.1-cross_search_paths-1.patch

 
然后同樣創(chuàng)建編譯目錄并在里面進行編譯:
 mkdir -v ../gcc-build
 cd ../gcc-build
 ../gcc-4.1.1/configure --prefix=${CLFS} --host=${CLFS_HOST} --target=${CLFS_TARGET} --disable-multilib --with-sysroot=${CLFS} --disable-nls --disable-shared --enable-languages=c
 make all-gcc
 make install-gcc

10.
安裝glibc
 
在前面安裝glibc的頭時已經做了一些事情,如把port解壓. 現(xiàn)在做的先是給glibc打補丁:
 cd glibc-2.5
 patch -Np1 -i ../patch/glibc-2.5-libgcc_eh-2.patch
 patch -Np1 -i ../patch/glibc-2.5-localedef_segfault-1.patch
 patch -Np1 -i ../patch/glibc-2.5-cross_hacks-2.patch
 patch -Np1 -i ../patch/glibc-2.5-branch_update-1.patch
 
然后創(chuàng)建編譯目錄并開始編譯:
 cd ../glibc-build
 rm -rf *
 
為支持NPTL做如下操作:
 echo "libc_cv_forced_unwind=yes" > config.cache
 echo "libc_cv_c_cleanup=yes" >> config.cache
 
指明安裝目錄:
 echo "install_root=${CLFS}" > configparms
 
開始編譯:
 BUILD_CC="gcc" CC="${CLFS_TARGET}-gcc" AR="${CLFS_TARGET}-ar" RANLIB="${CLFS_TARGET}-ranlib" ../glibc-2.5/configure --prefix=/usr --libexecdir=/usr/lib/glibc --host=${CLFS_TARGET} --build=${CLFS_HOST} --disable-profile --enable-add-ons --with-tls --enable-kernel=2.6.0 --with-__thread --with-binutils=${CLFS}/bin --with-headers=${CLFS}/usr/include --cache-file=config.cache

 
由于使用的是2.6.19的內核, 內核中使用了新的netlink接口, 把一些宏去掉了
 
參考maillist可知這些定義已經不在內核中使用, 但是應該還在用戶空間使用
 CLFS
中對最新內核的支持現(xiàn)在只到2.6.18.2
 
所以用2.6.19的需要自己修改一下:
 
修改目錄和文件為:
 glibc-2.5/sysdeps/unix/sysv/linux# grep IFA * -l
  check_pf.c
  if_index.c
  ifaddrs.c
 
在上面的文件中增加如下內容:
 #include <linux/if_addr.h>

 #define IFLA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg))))
 #define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
 #define IFA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg))))
 #define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg))
 
然后執(zhí)行下面操作
 make
 make install

 
下面安裝locale, 如果想安裝全部locale的話可以執(zhí)行下面的命令(時間比較長, 可能有半小時):
 make localedata/install-locales
 
而如果你不想全裝, 只想裝某些localeclfs推薦按下面命令執(zhí)行:
 mkdir -pv ${CLFS}/usr/lib/locale
 export I18NPATH=${PWD}/localedata
 export GCONV_PATH=${PWD}/iconvdata
 export LOCALEDEF="${PWD}/locale/localedef-native --alias-file=../intl/locale.alias"
 cd ../glibc-2.5/localedata
 ${LOCALEDEF} -i locales/de_DE -f charmaps/ISO-8859-1 --prefix=${CLFS} de_DE
 ${LOCALEDEF} -i locales/de_DE@euro -f charmaps/ISO-8859-15 --prefix=${CLFS} de_DE@euro
 ${LOCALEDEF} -i locales/en_HK -f charmaps/ISO-8859-1 --prefix=${CLFS} en_HK
 ${LOCALEDEF} -i locales/en_PH -f charmaps/ISO-8859-1 --prefix=${CLFS} en_PH
 ${LOCALEDEF} -i locales/en_US -f charmaps/ISO-8859-1 --prefix=${CLFS} en_US
 ${LOCALEDEF} -i locales/es_MX -f charmaps/ISO-8859-1 --prefix=${CLFS} es_MX
 ${LOCALEDEF} -i locales/fa_IR -f charmaps/UTF-8 --prefix=${CLFS} fa_IR
 ${LOCALEDEF} -i locales/fr_FR -f charmaps/ISO-8859-1 --prefix=${CLFS} fr_FR
 ${LOCALEDEF} -i locales/fr_FR@euro -f charmaps/ISO-8859-15 --prefix=${CLFS} fr_FR@euro
 ${LOCALEDEF} -i locales/it_IT -f charmaps/ISO-8859-1 --prefix=${CLFS} it_IT
 ${LOCALEDEF} -i locales/ja_JP -f charmaps/EUC-JP --prefix=${CLFS} ja_JP
 unset I18NPATH GCONV_PATH LOCALEDEF
 
個人認為如果不想全裝, 直接修改一下localedata/Makefile,把不需要的locale去掉后再執(zhí)行第一種方法可能更簡單. 這里我執(zhí)行的是第一種方法.

11.
配置glibc運行信息
 
如果不配置的話glibc也會有默認配置, 但是在網絡環(huán)境下可能不正常. 所以需要配置一下.
 
用如下命令創(chuàng)建文件/etc/nsswitch.conf,當然直接編輯更快(直接編輯時把后面的EOF去掉):
 cat > ${CLFS}/etc/nsswitch.conf << "EOF"
 # Begin /etc/nsswitch.conf

 passwd: files
 group: files
 shadow: files

 hosts: files dns
 networks: files

 protocols: files
 services: files
 ethers: files
 rpc: files

 # End /etc/nsswitch.conf
 EOF
 
然后用下面命令配置一下時區(qū):
 TZDIR="${CLFS}/usr/share/zoneinfo" ${CLFS}/usr/bin/tzselect
 
回答一些問題后, 使用下面命令保存timezone:
 cp -v --remove-destination ${clfs}/usr/share/zoneinfo/[xxx] \
  ${clfs}/etc/localtime
 [xxx]
就是上面的結果.
 
我的結果是:
 TZ='Asia/Shanghai'; export TZ
 
所以命令是:
 cp -v --remove-destination ${clfs}/usr/share/zoneinfo/'Asia/Shanghai' ${clfs}/etc/localtime


12.
配置動態(tài)裝載器(如果你有庫文件放在/lib/usr/lib外的其它目錄的話)
 
動態(tài)裝載器(/lib/ld-linux.so.2) /lib/usr/lib目錄下查找程序需要的動態(tài)庫.
 
如果動態(tài)庫所在目錄不上上面兩個目錄下, 那需要把它的目錄寫到/etc/ld.so.conf.
 
一般/usr/local/lib/opt/lib目錄也需要查找.
 
如果你有動態(tài)庫放在這兩個目錄下的話, 做如下操作(我沒有所以不做):
 cat > ${CLFS}/etc/ld.so.conf << "EOF"
 # Begin /etc/ld.so.conf

 /usr/local/lib
 /opt/lib

 # End /etc/ld.so.conf
 EOF

13.
編譯gcc. 前面已經編譯過一次. 前面的編譯是為了創(chuàng)建交叉版本的glibc, 現(xiàn)在則是創(chuàng)建交叉版本的gcc.
 
先打補丁
 cd gcc-4.1.1
 patch -Np1 -i ../patch/gcc-4.1.1-posix-1.patch
 patch -Np1 -i ../patch/gcc-4.1.1-PR20425-1.patch
 patch -Np1 -i ../patch/gcc-4.1.1-cross_search_paths-1.patch
 
第一個和每三個前面都已經打過了, 所以這里只需要再打第二個就可以了
 
然后創(chuàng)建編譯目錄:
 mkdir -v ../gcc-build
 cd ../gcc-build
 ../gcc-4.1.1/configure --prefix=${CLFS} \
  --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
 make install

14.
交叉編譯工具鏈已經做好,現(xiàn)在就小試一下牛刀,馬上來個Hello World

posted on 2008-02-10 16:18 幽幽 閱讀(1987) 評論(0)  編輯 收藏 引用 所屬分類: Linux

<2008年2月>
272829303112
3456789
10111213141516
17181920212223
2425262728291
2345678

常用鏈接

留言簿(6)

隨筆分類(35)

隨筆檔案(51)

文章分類(3)

文章檔案(3)

相冊

我的鏈接

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美在线观看一二区| 久久精品国产免费| 欧美人与性动交α欧美精品济南到| 亚洲欧美日韩综合aⅴ视频| 国产精品一区久久久| 日韩视频在线免费观看| 亚洲人成人77777线观看| 久久久噜噜噜久久人人看| 久久九九99| 欧美高清在线| 亚洲精品久久视频| 99精品久久| 欧美一区影院| 欧美成人一区二区三区| 欧美三级黄美女| 国产午夜精品一区理论片飘花 | 亚洲欧美日韩成人高清在线一区| 午夜精品久久久久久久99热浪潮 | 欧美a级一区二区| 欧美另类变人与禽xxxxx| 国产精品国产三级国产| 国产一区日韩二区欧美三区| 亚洲第一综合天堂另类专| 在线视频一区二区| 久久精品九九| 亚洲精品视频一区二区三区| 亚洲一区二区三区四区中文| 另类尿喷潮videofree| 国产精品国产福利国产秒拍| 亚洲承认在线| 久久激情一区| 夜夜嗨av一区二区三区中文字幕| 性感少妇一区| 国产精品va在线播放| 亚洲日本va午夜在线影院| 欧美在线视频导航| av成人福利| 欧美成人一区二区在线| 国产私拍一区| 亚洲欧美视频在线观看| 亚洲欧洲美洲综合色网| 久久国产精品久久久久久| 欧美午夜宅男影院| 亚洲国产另类久久精品| 久久激情综合网| 亚洲一区二区三区涩| 欧美日本亚洲| 亚洲日本电影| 亚洲国产高潮在线观看| 久久蜜桃av一区精品变态类天堂| 国产精品亚洲人在线观看| 国产精品99久久不卡二区| 亚洲福利电影| 你懂的国产精品永久在线| 亚洲在线观看免费视频| 亚洲先锋成人| 欧美日韩一区三区四区| 亚洲精品日本| 亚洲国产成人porn| 欧美高清视频www夜色资源网| 韩国一区二区三区美女美女秀| 欧美一区二区三区视频在线观看| 宅男噜噜噜66一区二区66| 欧美日韩在线播放| 亚洲午夜免费福利视频| 99精品视频一区| 欧美四级在线| 久久精品人人| 久久欧美中文字幕| 亚洲国产精品成人一区二区 | 国产精品综合不卡av| 亚洲欧美日韩国产另类专区| 这里只有精品丝袜| 国产美女精品在线| 麻豆91精品91久久久的内涵| 久久久久久夜| 亚洲精品影视在线观看| 亚洲精品在线观看视频| 国产精品久久久久久久久免费| 午夜精品久久久久久99热| 欧美一区二区三区视频在线观看| 国产精品视频久久久| 久久久亚洲高清| 欧美成人免费一级人片100| 一区二区三区不卡视频在线观看| 亚洲精品在线免费| 国产精品视频久久一区| 欧美国产日韩精品免费观看| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲精选一区| 亚洲欧美日韩精品久久| 亚洲第一成人在线| 日韩午夜免费视频| 国产综合网站| 亚洲国内精品在线| 国产性猛交xxxx免费看久久| 欧美二区在线观看| 国产精品久久久久久久久久久久久久| 久久免费观看视频| 欧美精品在线观看91| 午夜在线a亚洲v天堂网2018| 老司机精品导航| 午夜免费在线观看精品视频| 久热精品视频在线观看一区| 亚洲一区二区三区在线视频| 久久午夜精品| 欧美在线观看一区二区三区| 欧美精品啪啪| 美女黄色成人网| 国产精品区一区| 亚洲美女av黄| 最新热久久免费视频| 午夜精品久久久久| 亚洲一区综合| 欧美激情精品久久久久久久变态 | 好男人免费精品视频| 亚洲精品一品区二品区三品区| 国产毛片精品视频| 日韩午夜三级在线| 亚洲国产日日夜夜| 亚洲电影视频在线| 91久久国产综合久久91精品网站| 亚洲高清久久网| 最近中文字幕日韩精品 | 欧美成人综合一区| 久久久水蜜桃| 蜜臀av一级做a爰片久久| 欧美视频三区在线播放| 亚洲风情亚aⅴ在线发布| 国产在线视频欧美| 亚洲欧美日韩在线观看a三区| 夜夜嗨av色综合久久久综合网| 麻豆精品一区二区综合av| 久久天天躁狠狠躁夜夜av| 国产欧美二区| 亚洲在线中文字幕| 性色av一区二区三区红粉影视| 欧美日韩18| 日韩视频免费| 亚洲欧美精品一区| 国产精品自拍一区| 欧美在线观看天堂一区二区三区 | 亚洲人成毛片在线播放| 日韩一级欧洲| 欧美日韩国内| 亚洲午夜极品| 午夜精品久久久久久久| 国产日韩精品综合网站| 性做久久久久久| 模特精品裸拍一区| 91久久精品一区| 欧美精品一区在线| 亚洲欧美另类久久久精品2019| 久久不见久久见免费视频1| 国产午夜精品美女毛片视频| 亚洲欧美日韩国产综合| 欧美96在线丨欧| 一区二区免费看| 国产精品欧美一区喷水| 久久成人人人人精品欧| 欧美高清在线播放| 一区二区三区四区五区精品视频| 欧美色图一区二区三区| 先锋影院在线亚洲| 国产香蕉97碰碰久久人人| 久久久www免费人成黑人精品| 亚洲高清免费在线| 亚洲一区二区三区精品动漫| 国产日韩欧美麻豆| 欧美成年人视频网站| 99在线精品观看| 噜噜噜91成人网| 亚洲影音一区| 麻豆精品一区二区综合av| 国产日韩欧美精品在线| 另类综合日韩欧美亚洲| 夜夜嗨av一区二区三区| 老司机aⅴ在线精品导航| 日韩视频免费大全中文字幕| 国产精品久久久久影院亚瑟 | 欧美激情在线狂野欧美精品| 宅男精品视频| 在线看日韩欧美| 国产精品人人爽人人做我的可爱| 久久综合狠狠综合久久综合88| 一本到高清视频免费精品| 欧美 日韩 国产精品免费观看| 亚洲一区日韩在线| 最新日韩欧美| 一区二区视频免费在线观看| 国产精品高清网站| 欧美精品在线一区二区三区| 久久国产一区| 性久久久久久久| 亚洲欧美电影院| 一本色道久久综合| 亚洲精品美女在线观看| 欧美成人免费va影院高清| 欧美中文在线观看| 亚洲欧美综合国产精品一区|