一. 准備工作
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 tools export LC_ALL=C bash --version | head -n1 | cut -d" " -f2-4 MYSH=$(readlink -f /bin/sh) echo "/bin/sh -> $MYSH" echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash" unset MYSH echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3- bison --version | head -n1 if [ -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" fi bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6- echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2 diff --version | head -n1 find --version | head -n1 gawk --version | head -n1 if [ -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" fi gcc --version | head -n1 g++ --version | head -n1 ldd --version | head -n1 | cut -d" " -f2- # glibc version grep --version | head -n1 gzip --version | head -n1 cat /proc/version m4 --version | head -n1 make --version | head -n1 patch --version | head -n1 echo Perl `perl -V:version` sed --version | head -n1 tar --version | head -n1 makeinfo --version | head -n1 xz --version | head -n1 echo 'int main(){}' > dummy.c && g++ -o dummy dummy.c if [ -x dummy ] then echo "g++ compilation OK"; else echo "g++ compilation failed"; fi rm -f dummy.c dummy EOF bash version-check.shView Code
a. 如果宿主系統是Raspbian,你會發現缺少了四個包,使用命令行增加:
apt-get update apt-get install bison gawk m4 texinfo
b. 同時,/bin/sh 是指向dash,使用命令行修改指向bash:
ln -sf bash /bin/sh
3. 同時,還請進行庫文件的一致性檢查,這些文件應該要麼都在或者是都缺失,而不應該只有一兩個。
cat > library-check.sh << "EOF" #!/bin/bash for lib in lib{gmp,mpfr,mpc}.la; do echo $lib: $(if find /usr/lib* -name $lib| grep -q $lib;then :;else echo not;fi) found done unset lib EOF bash library-check.shView 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/lfs mkdir -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-list wget -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 代替運行中的 shell cat > ~/.bash_profile << "EOF" exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash EOF # 新的 shell 實例是一個非登錄 shell,不會讀取 /etc/profile 或者 .bash_profile 文件,而是讀取 .bashrc 文件 cat > ~/.bashrc << "EOF" set +h umask 022 LFS=/mnt/lfs LC_ALL=POSIX LFS_TGT=$(uname -m)-lfs-linux-gnueabihf PATH=/tools/bin:/bin:/usr/bin export LFS LC_ALL LFS_TGT PATH EOF # 啟用配置文件 source ~/.bash_profileView Code
http://xxxxxx/Linuxjc/1186724.html TechArticle