host系統,開(kāi)始點(diǎn)
建立環(huán)境變量:設置好CLFS_HOST,CLFS_TARGET
第五章,建立交叉工具鏈:
1,在/tools下面拷貝好內核頭文件
2,交叉連接器(cross binutils),通過(guò)--prefix=/cross-tools--host=${CLFS_HOST} --target=${CLFS_TARGET} --with-lib-path=/tools/lib--enable-shared
裝在cross-tools下,在HOST中運行,鏈接的代碼是在目標系統上運行的
3,交叉編譯器(cross gcc,static)
得到靜態(tài)的僅需要c的交叉編譯器
把 StartFile Spec指向/tools/lib,gcc的預處理默認include搜索路徑僅僅為/tools/include
--prefix=/cross-tools --host=${CLFS_HOST} --target=${CLFS_TARGET} –disable-shared
4,C庫安裝
BUILD_CC="gcc" CC="${CLFS_TARGET}-gcc" \
AR="${CLFS_TARGET}-ar"RANLIB="${CLFS_TARGET}-ranlib" \
../glibc-2.4/configure --prefix=/tools \
--host=${CLFS_TARGET} --build=${CLFS_HOST}\
--disable-profile --enable-add-ons \
--with-tls --enable-kernel=
--with-binutils=/cross-tools/bin--with-headers=/tools/include \
--cache-file=config.cache
BUILD_CC是指編譯glibc的過(guò)程中要用到的一些程序用什么gcc來(lái)編譯,編譯出來(lái)的工具很快就會(huì )用到,并且是本地運行的,自然用本地的gcc最合適,然后CC,AR等是交叉編譯的gcc,ar等,這是因為編譯出來(lái)的glibc的二進(jìn)制庫是在目標體系上平臺運行的,所有自然用交叉版本了
--host=CLFS_TARGET,--build=CLFS_HOST,構建平臺是HOST,編譯出來(lái)的glibc的host平臺是目標體系
安裝到/tools下面,要使用binutils時(shí)用交叉版本所在目錄,頭文件用/tools/include
5,交叉編譯器的最終完成
動(dòng)態(tài)鏈接版本的交叉編譯器gcc,編譯出交叉版的c,c++編譯器
至此基本的交叉工具鏈就成了,此時(shí),/tools下面就只有內核頭文件,和目標體系的Glibc,用交叉工具鏈/cross-tools里面的編譯鏈接程序鏈接到/tools中的庫建立的程序是用于目標系統的,不能用于主系統的。
第六章,構建一個(gè)臨時(shí)系統
設置交叉版本的CC,CXX,AS,AR,RANLIB,LD環(huán)境變量,這些工具都在/cross-tools交叉工具鏈中,用這個(gè)交叉工具,編譯一些基本的最終的CLFS系統的基本工具
1,binutils工具
--prefix=/tools --build=${CLFS_HOST} --host=${CLFS_TARGET}--target=${CLFS_TARGET} --enable-shared
通過(guò)交叉工具鏈編譯出只能在目標體系上運行的ld等程序,并且這些ld程序對于目標體系來(lái)說(shuō)是本地ld
2。gcc
跟binutils一樣,當最終的CLFS系統不需要編譯添加新程序的話(huà),這些binutils和gcc就都可以不需要安裝
3。Ncurses,Bzip,Coreutils等等程序
然后兩條路走,boot或chroot
boot的話(huà)就需要在構建一個(gè)內核,一個(gè)bootloader,和一些其他工具,在boot進(jìn)入臨時(shí)系統,這當我們在x86上構建一個(gè)arm系統時(shí),別無(wú)選擇,只能boot
chroot是對構建運行同樣體系結構的系統,同樣內核系列的時(shí)候,意思是這第六章構建的程序可以在本地系統上運行,就可以見(jiàn)到的chroot了
可以通過(guò)/tools/lib/libc.so.6,/tools/bin/gcc -v兩條命令來(lái)實(shí)驗,任何一條失敗,都只能選boot路了
第七章,選擇boot路的話(huà)
要想能夠boot進(jìn)$CLFS,當然還有些程序要安裝
1,安裝FHS目錄,要boot進(jìn)來(lái),當然文件系統目錄不能少了
2,在剛建好的有些目錄下,ln一些必需的程序,比如在$CLFS/bin下ln上bash,cat,grep,pwd等等
3,以--prefix=/tools(/)--build=$CLFS_HOST --host=$CLFS_TARGET為配置選項,這里理解的關(guān)鍵是安裝選項中加入DESTDIR="${CLFS}",跟通常的程序安裝比,這里DESTDIR指定了一個(gè)“根”目錄,跟CLFS2中的--with-sysroot概念類(lèi)似
4,Sysvinit,Module-init-Tools,Util-linux,Udev,passwd,group,log文件
5,內核生成
配置:makeARCH=i386 CROSS_COMPILE=${CLFS_TARGET}- menuconfig
編譯:makeARCH=i386 CROSS_COMPILE=${CLFS_TARGET}-
模塊安裝:內核配置用了模塊功能,make ARCH=i386 CROSS_COMPILE=${CLFS_TARGET}-INSTALL_MOD_PATH=${CLFS} modules_install
拷貝移動(dòng)內核映象bzImage,系統映射圖System.map,配置文件.config到${CLFS}/boot目錄下
6,安裝grub
7,設置環(huán)境,就是${CLFS}/root/.bash_profile的設置,里面對PATH的設置,把/tools/bin放在最后面
8,創(chuàng )建/etc/fstab
9,安裝啟動(dòng)腳本,make ETCDIR=${CLFS}/etcminimal
10,Vdev Rules,創(chuàng )建設備節點(diǎn)
11,使臨時(shí)系統可啟動(dòng),用grub的setup,設置menu.lst
12, 最后把${CLFS}打包, tar -jcvf ${CLFS}.tar.bz2 ${CLFS}
第八章,選擇chroot路
這樣的話(huà),跟lfs比較類(lèi)似了
聯(lián)系客服