亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: snow888
打印 上一主題 下一主題

從 0 開始,打造自己的 Linux 。 [復(fù)制鏈接]

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
31 [報告]
發(fā)表于 2012-04-12 16:10 |只看該作者
本帖最后由 snow888 于 2012-04-12 16:11 編輯

好了,通過上面的努力,我們已經(jīng)有了一個基本的工具鏈,從 gcc 到匯編器 as , 再到鏈接器 ld , 是不是很有趣?

剛剛測試了一下,binutils 在編譯的時候,如果帶有 --enablllle-targets=all 則編譯在 objdump 的時候會失敗,不知道是因為我在虛擬機上操作的原因,還是母體的編譯器的原因


我們來找找那幾個特殊的文件吧。

進入 /My_Operation/myuser/tmptools/lib/gcc/i686-pc-linux-gnu/4.0.3 下面,

ls -al 看看,你能看到什么?   ^_^.

這幾個所有程序的總綱文件,是不是都已經(jīng)存在了?

還記得我們在編譯 binutils 的時候說過什么?

如果用我們編譯生成的 ld 來開發(fā)程序,目前鏈接的依然是母體的 libgcc_s.so.1 或者是 libgcc_eh.a ,郁悶嗎?不要緊,我們來調(diào)整一下。

再次進入 /My_Operation/myuser/tools_src/binutils-2.16.1/ld

$ gmake -k clean                           ;; 我們將 ld 目錄下所編譯生成的所有文件刪除
$ gmake LDFLAGS="-static" LIB_PATH=/My_Operation/myuser/tmptools/lib                   ;; 讓我們的鏈接器在鏈接二進制文件的時候找 /My_Operation/myuser/tmptools/lib 目錄下的那些個特殊文件。
$ gmake install

為什么在這個時候調(diào)整?因為我們已經(jīng)有了基礎(chǔ)了

特別要注意的是,我們在編譯 gcc 的時候, host 、target、build 這三個參數(shù)與編譯 binutils 的時候要完全一致,否則你的 gcc 將找不到匯編器和鏈接器,切記!切記!
如無特殊說明,在我們下面的編譯過程中,這三個參數(shù)都采用前面的值,不再重復(fù)提醒。

另一個需要注意的地方是,在安裝完 binutils 之后,我們需要進入 /My_Operation/myuser/tmptools/bin 目錄,將 ld 改名為 ld-new ,進入 /My_Operation/myuser/tmptools/i686-pc-linux-gnu/bin 目錄,將 ld 改名為 ld-new 。

這樣做的原因是我們的 glibc 還沒有安裝,有大量的軟件包在鏈接的時候會使用 -l 參數(shù)來指定我們編譯的程序需要鏈接哪些庫包,遺憾的是,目前我們還沒有,因此使用這個新的調(diào)整后的 ld 鏈接器會出現(xiàn)大量的錯誤。


下面我們該開始安裝 linux-libc-h(huán)eaders 了,這個需要講的地方不多,其實就是 linux 內(nèi)核的頭文件。

展開,拷貝到 /My_Operation/myuser/tmptools/include 目錄下即可。

$ cd linux-libc-header-2.6.12.0/include
$ cp -Rv asm-i386 /My_Operation/myuser/tmptools/include/asm
$ cp -Rv linux /My_Operation/myuser/tmptools/include



論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
32 [報告]
發(fā)表于 2012-04-13 00:15 |只看該作者
本帖最后由 snow888 于 2012-04-13 00:16 編輯

好了,下面我們需要系統(tǒng)的基本庫了,來,我們繼續(xù)。

下面我們需要安裝 glibc 了,這個軟件包是什么?用過 Unix 系統(tǒng)的朋友都知道,這個咚咚相當(dāng)于我們系統(tǒng)中的 /lib 、 /usr/lib 、/usr/local/lib 目錄下的所有文件,是我們的系統(tǒng)能夠得以正確運行的基礎(chǔ)支撐庫文件。

不多解釋了,需要詳細(xì)了解這個咚咚中間每個包得作用的朋友,可以自己去 google ,或者到 www.gnu.org 上去看看文檔(得先打好 E 文基礎(chǔ)哦 ^_^.)

我們還是構(gòu)建一個新的編譯目錄

$ mkdir glibc_build
$ cd glibc_build
$ ../glibc-2.3.6/configure --prefix=/My_Operation/myuser/tmptools ----disable-profile --enable-add-ons \
--enable-kernel=2.6.0 --with-binutils=/My_Operation/myuser/tmptools/bin \
--without-gd --with-headers=/My_Operation/myuser/tmptools/include \
--without-selinux

這個地方解釋一下:

--enable-addd-ons                                                                           ;;這個指示 Glibc 使用附加的 NPTL 包作為線程庫。
--enable-kernel=2.6.0                                                                      ;;通知Glibc 編譯出支持 2.6.x 內(nèi)核的庫。
--with-binutils=/My_Operation/myuser/tmptools/bin                        ;;指定在編譯 glibc 時使用我們前面構(gòu)建的 binutils 工具 ( ld 除外,我們將它改名了)
--without-gd                                                                                     ;;保證不生成 memusagestat 程序,這個程序會頑固地將我們生成的庫文件連接到宿主系統(tǒng)的庫文件(libgd, libpng, libz 等等)。
--with-headers=/My_Operation/myuser/tmptools/include                ;; 指定我們使用自己安裝的 linux 內(nèi)核頭文件
--without-selinux                                                                              ;; 我們不打算安裝 selinux ,如果要安裝這個咚咚,那么我們在這里需要打開。


$ make
$ make install

激動人心的時刻到來了
下面我們開始調(diào)整工具鏈,讓我們前面構(gòu)建的環(huán)境出現(xiàn)一個能徹底脫離母體環(huán)境的工具鏈。
step 1)
            進入 /My_Operation/myuser/tmptools/bin 目錄,將我們的 ld-new 改成 ld
            $ cd /My_Operation/myuser/tmptools/bin
            $ mv ld-new ld
step 2)
            進入 /My_Operation/myuser/tmptools/i686-pc-linux-gnu/bin 目錄,將我們的 ld-new 改成 ld
            $ cd /My_Operation/myuser/tmptools/i686-pc-linux-gnu/bin
            $ mv ld-new ld
step 3)
            進入 /My_Operation/myuser/tmptools/lib/gcc/i686-pc-linux-gnu/4.0.3 目錄,修改我們的鏈接配置文件 specs
             $ cd /My_Operation/myuser/tmptools/lib/gcc/i686-pc-linux-gnu/4.0.3
             $ vi specs
            將其中的 /lib/ld-linux.so.2 全部修改成 /My_Operation/myuser/tmptools/lib/ld-linux.so.2

修改完成以后,我們來測試一下:
進入 /tmp 目錄,編寫一個測試文件:a.c
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. int main ( void )
  5. {
  6.               puts(" I am test program file!\n");
  7.               return 0;
  8. }
復(fù)制代碼
設(shè)置你的環(huán)境變量,啟用你剛才構(gòu)建的編譯環(huán)境:
$ export PATH=/My_Operation/myuser/tmptools/bin:$PATH
編譯你的測試程序:
$ gcc -o a a.c
檢查你剛才編譯的文件,看看編譯的信息
$ ldd a
看看輸出了什么信息?

是不是有點成就感了?到現(xiàn)在為止,你已經(jīng)成功了 三分之一了。

時間關(guān)系,今天就暫時先講到這里。

論壇徽章:
0
33 [報告]
發(fā)表于 2012-04-13 08:49 |只看該作者
謝謝老師!還有呢?

論壇徽章:
20
CU大;照
日期:2013-03-13 15:29:072015亞冠之阿爾希拉爾
日期:2015-09-12 09:33:562015年亞冠紀(jì)念徽章
日期:2015-09-22 17:12:202015亞冠之本尤德科
日期:2015-10-29 16:18:18神斗士
日期:2015-11-23 13:37:23青銅圣斗士
日期:2015-12-07 10:14:28平安夜徽章
日期:2015-12-26 00:06:3015-16賽季CBA聯(lián)賽之佛山
日期:2016-01-18 08:59:06shanzhi
日期:2016-06-17 17:59:3115-16賽季CBA聯(lián)賽之同曦
日期:2016-11-03 14:43:552015七夕節(jié)徽章
日期:2015-08-21 11:06:17丑牛
日期:2014-12-30 16:06:17
34 [報告]
發(fā)表于 2012-04-13 12:14 |只看該作者
樓主辛苦了

論壇徽章:
19
CU大;照
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大;照
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大;照
日期:2013-05-20 10:46:31CU大;照
日期:2013-05-20 10:46:25CU大;照
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大;照
日期:2013-04-17 11:19:37CU大;照
日期:2013-04-17 11:19:32CU大;照
日期:2013-04-17 11:19:28
35 [報告]
發(fā)表于 2012-04-13 12:52 |只看該作者
本帖最后由 方兆國 于 2012-04-13 13:01 編輯


你說的GENTOO就這個東西嗎?這個貌似沒有iso文件……

回復(fù) 13# chenyx


   

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
36 [報告]
發(fā)表于 2012-04-13 12:57 |只看該作者
回復(fù) 35# 方兆國


    這玩意兒和 lfs 的區(qū)別在于它給了工具鏈,而 lfs 的工具鏈需要自己打造。

另一個區(qū)別是這玩意兒有一個包管理器,而 lfs 沒有包管理器,其它的部分大同小異。

事實上,到目前為止,我的這篇文章,工具鏈已經(jīng)形成了,下面的部分除了 包管理器以外,其它的部分基本相同了。

所以,這玩意兒不會有 iso 的。它是完全讓你自己去定制自己的系統(tǒng)的。

論壇徽章:
19
CU大;照
日期:2013-03-13 15:32:35CU大;照
日期:2013-09-18 15:15:15CU大;照
日期:2013-05-20 10:46:44CU大;照
日期:2013-05-20 10:46:38CU大;照
日期:2013-05-20 10:46:31CU大;照
日期:2013-05-20 10:46:25CU大;照
日期:2013-05-20 10:46:18CU大;照
日期:2013-04-17 11:19:51CU大;照
日期:2013-04-17 11:19:42CU大;照
日期:2013-04-17 11:19:37CU大;照
日期:2013-04-17 11:19:32CU大;照
日期:2013-04-17 11:19:28
37 [報告]
發(fā)表于 2012-04-13 13:06 |只看該作者
回復(fù) 36# snow888


    其實我最關(guān)心的是怎么在母體環(huán)境下給子系統(tǒng)安裝GRUB引導(dǎo)……

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
38 [報告]
發(fā)表于 2012-04-13 13:18 |只看該作者
回復(fù) 37# 方兆國


    那個太簡單,最難的部分是形成一個完全脫離母體的工具鏈和完全脫離母體的使用工具。

論壇徽章:
381
CU十二周年紀(jì)念徽章
日期:2014-01-04 22:46:58CU大;照
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大;照
日期:2013-03-13 15:38:52CU大;照
日期:2013-03-14 14:08:55CU大;照
日期:2013-04-17 11:17:19CU大;照
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大;照
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
39 [報告]
發(fā)表于 2012-04-13 13:45 |只看該作者
回復(fù) 35# 方兆國


    你的那個是什么地方的?應(yīng)該在http://www.gentoo.org/main/en/where.xml下載iso

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
40 [報告]
發(fā)表于 2012-04-13 13:51 |只看該作者
本帖最后由 snow888 于 2012-04-13 14:04 編輯

好,到目前為止,我們已經(jīng)有了一個完全脫離母體的編譯工具,下面我們將使用這個工具來完成我們下面的工作,由于我們下面可能要頻繁的在母體和這個獨立的編譯環(huán)境進行切換,為了方便這里給大家貢獻(xiàn)兩個小工具。

在 work 用戶下建立 bin 目錄,并在該目錄下編寫兩個 shell 腳本命令。

403.sh
  1. #!/bin/sh
  2. OLD_PATH=$PATH
  3. export OLD_PATH
  4. GCC_HOME=/My_Operation/myuser/tmptools
  5. export GCC_HOME
  6. PATH=$GCC_HOME/bin:$PATH
  7. export PATH
復(fù)制代碼
un.sh
  1. #!/bin/sh
  2. PATH=$OLD_PATH
  3. export PATH
  4. unset OLD_PATH
  5. unset GCC_HOME
復(fù)制代碼
如何使用?
在我們需要切換到獨立的這個編譯環(huán)境的時候,我們輸入 $ . 403.sh
在我們需要回到母體環(huán)境的時候,我們輸入 $ . un.sh
"." 與命令之間有一個空格

下面我們開始清理留在 gcc 4.0.3 環(huán)境的母體的 fixincl , 這個已經(jīng)不需要了。
切換到 gcc 4.0.3 的編譯環(huán)境
$ . 403.sh

執(zhí)行下面的腳本(我建議你直接拷貝執(zhí)行,可以編寫一個 shell 腳本文件,然后用 sh <腳本文件> 的方式執(zhí)行)。
GCC_INCLUDEDIR=`dirname $(gcc -print-libgcc-file-name)`/include &&
find ${GCC_INCLUDEDIR}/* -maxdepth 0 -xtype d -exec rm -rvf '{}' \; &&
rm -vf `grep -l "DO NOT EDIT THIS FILE" ${GCC_INCLUDEDIR}/*` &&
unset GCC_INCLUDEDIR

執(zhí)行完成以后,我們的 gcc 403 就幾乎與母體沒有任何關(guān)系了。下面我們用這個 gcc 4.0.3 來編譯我們的新系統(tǒng)的工具。如果沒有特殊說明,我們下面所有的編譯都采用靜態(tài)編譯的方式,并且安裝目錄都指向 /My_operation/myuser/ 目錄,這個目錄是我們最后脫離母體后的新生系統(tǒng)的根目錄。

下面我們以 make 3.8.0 為例,來進行講解,其它的工具安裝與此大同小異,不重復(fù)講解了。

step 1)設(shè)置編譯鏈接環(huán)境
          $ export CC=gcc
          $ export CFLAGS="-g -O2 -Bstatic"
          $ export LDFLAGS="-all-static"
          $ export CXXFLAGS="-g -O2 -Bstatic"
          $ export CXX=gcc
特別注意:如果某些軟件的編譯環(huán)境不認(rèn) LDFLAGS="-all-static" 可將其改為 LDFLAGS="-static"
step 2) 創(chuàng)建編譯目錄
          $ mkdir make_build
step 3) 生成編譯的腳本文件 Makefile
          $ ../make-3.8.0/configure --prefix=/My_Operation/myuser  --host=i686-pc-linux-gnu --target=i686-pc-linux-gnu --build=i686-pc-linux-gnu --enable-static --disable-rpath
step 4) 檢查生成的 Makefile 文件,發(fā)現(xiàn)不是靜態(tài)編譯的,將對應(yīng)的環(huán)境變量參數(shù),加入到 Makefile 文件中對應(yīng)的環(huán)境變量參數(shù)中。
step 5) 編譯并安裝
          $ make
          $ make install


這幾個參數(shù)的說明,不需要再詳細(xì)講解了吧,只強調(diào)一點 --enable-static 指出編譯一個靜態(tài)的環(huán)境出來, --disable-rpath ,將生成的文件脫離硬編碼的目標(biāo)路徑

為什么要這樣做?
因為我們的這個系統(tǒng)第一次脫離母體以后,我們的這些個鏈接文件都不在根目錄對應(yīng)的子目錄之下,而在 /tmptools 目錄下,而一旦系統(tǒng)脫離了這個環(huán)境,我們的工具如果是動態(tài)編譯的,那將使得我們的命令在執(zhí)行的時候無法找到 /My_Operation/myuser/tmptools 目錄下的動態(tài)鏈接庫文件,因為這個目標(biāo)路徑已經(jīng)移動了

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP