Raspberry Pi(樹莓派)上從零開始構建Linux系統(簡稱PiLFS)(一),raspberrypilfs

來源:互聯網
上載者:User

Raspberry Pi(樹莓派)上從零開始構建Linux系統(簡稱PiLFS)(一),raspberrypilfs

一. 準備工作

  1. 裝有Linux宿主系統的樹莓派主板,可參考 Raspberry Pi(樹莓派)上安裝Raspbian(無路由器,無顯示器)

  2. 參考網址:Linux From Scratch on the Raspberry Pi

  3. 參考網址:Linux From Scratch Version Development

 

二. PiLFS 目標架構

  PiLFS主要支援 ARM(64位)的目標架構。

  假如按照本文的預設構建,那麼你將得到一個“純” 64 位元系統————這意味著你僅能夠執行64 位元的程式。

 

三. 宿主系統需求

  1. 如果宿主系統是Raspbian,設定 root 密碼,並且以root使用者登入

sudo passwd root
su - root

  2. 請執行以下命令,查看宿主機的各個軟體包的版本以及編譯環境是否準備妥當:

cat > version-check.sh << "EOF"#!/bin/bash# Simple script to list version numbers of critical development toolsexport LC_ALL=Cbash --version | head -n1 | cut -d" " -f2-4MYSH=$(readlink -f /bin/sh)echo "/bin/sh -> $MYSH"echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash"unset MYSHecho -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-bison --version | head -n1if [ -h /usr/bin/yacc ]; then  echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";elif [ -x /usr/bin/yacc ]; then  echo yacc is `/usr/bin/yacc --version | head -n1`else  echo "yacc not found" fibzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2diff --version | head -n1find --version | head -n1gawk --version | head -n1if [ -h /usr/bin/awk ]; then  echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";elif [ -x /usr/bin/awk ]; then  echo awk is `/usr/bin/awk --version | head -n1`else   echo "awk not found" figcc --version | head -n1g++ --version | head -n1ldd --version | head -n1 | cut -d" " -f2-  # glibc versiongrep --version | head -n1gzip --version | head -n1cat /proc/versionm4 --version | head -n1make --version | head -n1patch --version | head -n1echo Perl `perl -V:version`sed --version | head -n1tar --version | head -n1makeinfo --version | head -n1xz --version | head -n1echo 'int main(){}' > dummy.c && g++ -o dummy dummy.cif [ -x dummy ]  then echo "g++ compilation OK";  else echo "g++ compilation failed"; firm -f dummy.c dummyEOFbash version-check.sh
View Code

    a. 如果宿主系統是Raspbian,你會發現缺少了四個包,使用命令列增加:

apt-get updateapt-get install bison gawk m4 texinfo

    b. 同時,/bin/sh 是指向dash,使用命令列修改指向bash:

ln -sf bash /bin/sh

  3. 同時,還請進行庫檔案的一致性檢查,這些檔案應該要麼都在或者是都缺失,而不應該只有一兩個。

cat > library-check.sh << "EOF"#!/bin/bashfor lib in lib{gmp,mpfr,mpc}.la; do  echo $lib: $(if find /usr/lib* -name $lib|               grep -q $lib;then :;else echo not;fi) founddoneunset libEOFbash library-check.sh
View Code

     如果宿主系統是Raspbian,這些庫檔案都是缺失的,不用管它

 

四. 建立新分區

  1. 宿主系統下安裝分區工具 gparted,命令:

apt-get install gparted

  2. 利用 gparted 重新劃分TF卡,划出一個LFS系統磁碟分割,我的TF卡是分為:

    /dev/mmcblk0p1       64M        FAT32        boot分區

    /dev/mmcblk0p2      16.9G      EXT4          宿主系統磁碟分割

    /dev/mmcblk0p3       2G          Swap          交換分區

    /dev/mmcblk0p4       10G        EXT4          LFS系統磁碟分割

 

五. 掛載新分區

export LFS=/mnt/lfsmkdir -pv $LFS   mount -v -t ext4 /dev/mmcblk0p4 $LFS    # 如果你正在使用交換分區,用 swapon 命令確保它已經啟用/sbin/swapon -v /dev/mmcblk0p3


六. 軟體包與補丁

  1. 以 root 使用者執行下面的命令建立$LFS/sources目錄

mkdir -v $LFS/sources

  2. 設定目錄的寫入權限和粘滯模式

chmod -v a+wt $LFS/sources

    “粘滯模式”意思是就算有多個使用者對某個目錄有寫入權限,仍然只有該檔案的主人能刪除一個粘滯目錄裡的檔案。

  3. 下載構建PiLFS需要的軟體包和補丁

wget http://www.intestinate.com/pilfs/scripts/wget-listwget -i wget-list -P $LFS/sources


七. 最後的準備工作

  1. 建立 $LFS/tools 檔案夾

# 以 root 使用者運行以下的命令:# 編譯的臨時工具會安裝到 $LFS/tools 檔案夾,不會成為最終 LFS 系統的一部分。mkdir -v $LFS/tools

  2. 在宿主系統中建立 /tools 的符號連結,將其指向$LFS/tools

# 以 root 使用者運行以下的命令:# 建立的符號連結使得編譯的工具鏈總是指向 /tools 檔案夾。ln -sv $LFS/tools /

  3. 添加lfs使用者

# 以 root 使用者運行以下命令來添加新組和新使用者:# 當以 root 使用者登入時,犯一個小錯誤可能會破壞或摧毀整個系統。groupadd lfs    # 添加新組useradd -s /bin/bash -g lfs -m -k /dev/null lfs     # 添加新使用者    passwd lfs      # 為使用者佈建密碼chown -v lfs $LFS/tools     # 賦予了訪問 $LFS/tools 檔案夾的所有許可權chown -vR lfs $LFS/sources   # 賦予了訪問 $LFS/sources 檔案夾及子檔案的所有許可權su - lfs    # 切換使用者

  4. 設定環境

# 以 lfs 使用者登入運行以下兩個命令,為 bash shell 建立兩個開機啟動的檔案。# 當以 lfs 使用者身份登入時,初始 shell 通常是一個可登入的 shell# 它先讀取宿主機的 /etc/profile 檔案(很可能包括一些設定和環境變數),然後是 .bash_profile 檔案# .bash_profile 檔案使用完全空環境的 shell 代替運行中的 shellcat > ~/.bash_profile << "EOF"exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bashEOF# 新的 shell 執行個體是一個非登入 shell,不會讀取 /etc/profile 或者 .bash_profile 檔案,而是讀取 .bashrc 檔案cat > ~/.bashrc << "EOF"set +humask 022LFS=/mnt/lfsLC_ALL=POSIXLFS_TGT=$(uname -m)-lfs-linux-gnueabihfPATH=/tools/bin:/bin:/usr/binexport LFS LC_ALL LFS_TGT PATHEOF# 啟用設定檔source ~/.bash_profile
View Code

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.