2021-05-12 14:32:11
Raspberry Pi(樹莓派)上從零開始構建Linux系統(簡稱PiLFS)
一. 準備工作
1. 裝有Linux宿主系統的樹莓派主機板,可參考 Raspberry Pi(樹莓派)上安裝Raspbian(無路由器,無顯示器)
2. 參考網址:Linux From Scratch on the Raspberry Pi
3. 參考網址:Linux From Scratch Version Development
4. 參考文件:LFS-BOOK-SVN-20161221.pdf
到Linux公社資源站下載:
------------------------------------------分割線------------------------------------------
免費下載地址在 http://linux.linuxidc.com/
使用者名稱與密碼都是www.linuxidc.com
具體下載目錄在 /2017年資料/1月/14日/Raspberry Pi(樹莓派)上從零開始構建Linux系統(簡稱PiLFS)/
下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm
------------------------------------------分割線------------------------------------------
二. PiLFS 目標架構
PiLFS主要支援 ARM(64位元)的目標架構。
假如按照本文的預設方式構建,那麼你將得到一個“純” 64 位系統————這意味著你僅能夠執行64 位的程式。
三. 宿主系統需求
1. 如果宿主系統是Raspbian,設定 root 密碼,並且以root使用者登入
sudo passwd root
su - root
2. 請執行以下命令,檢視宿主機的各個軟體包的版本以及編譯環境是否準備妥當:
#!/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 --version2>&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.sh
a. 如果宿主系統是Raspbian,你會發現缺少了四個包,使用命令列增加:
apt-get update
apt-get install bison gawk m4 texinfo
b. 同時,/bin/sh 是指向dash,使用命令列修改指向bash:
ln -sf bash /bin/sh
3. 同時,還請進行庫檔案的一致性檢查,這些檔案應該要麼都在或者是都缺失,而不應該只有一兩個。
如果宿主系統是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_profile
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2017-01/139538p2.htm
相關文章