歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> Raspberry Pi(樹莓派)上從零開始構建Linux系統(簡稱PiLFS)(二),raspberrypilfs

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

日期:2017/3/3 17:38:50   编辑:學習Linux

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

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


七. 構建臨時系統

  1. 通用編譯指南

    a. 確認是否正確設置了 LFS 環境變量

echo $LFS

    b. 假定你已經正確地設置了宿主系統需求和符號鏈接

    c. 對於每個軟件包:

      (1). 確保解壓軟件包時你使用的是 lfs 用戶

      (2). 除非特別說明,刪除解壓出來的目錄和所有編譯過程中生成的 build 目錄

  2. 執行shell腳本,完成臨時系統的構建

cd $LFS/sources
chmod +x ch5-build.sh
./ch5-build.sh

  

  3. 改變屬主

    以後部分的命令都必須以 root 用戶身份執行而不再是 lfs 用戶。另外,再次確認下 $LFS 變量在 root 用戶環境下也有定義。

  當前,$LFS/tools 目錄屬於 lfs 用戶,通過下面的命令將 $LFS/tools 目錄的屬主改為 root 用戶:

su - root export LFS=/mnt/lfs chown -R root:root $LFS/tools

八. 構建LFS系統

  1. 准備虛擬內核文件系統

      內核會掛載幾個文件系統用於自己和用戶空間程序交換信息。這些文件系統是虛擬的,並不占用實際磁盤空間,

    它們的內容會放在內存裡。

mkdir -pv $LFS/{dev,proc,sys,run}
mknod -m 600 $LFS/dev/console c 5 1
mknod -m 666 $LFS/dev/null c 1 3
mknod -m 444 /dev/random c 1 8 mknod -m 444 /dev/urandom c 1 9 mount -v --bind /dev $LFS/dev
mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
mount -vt tmpfs tmpfs $LFS/run
if [ -h $LFS/dev/shm ]; then
  mkdir -pv $LFS/$(readlink $LFS/dev/shm)
fi

  2. 進入 Chroot 環境    

    從這裡以後,就不再需要 LFS 變量了,因為後面所有工作都將被限定在 LFS 文件系統裡。

chroot "$LFS" /tools/bin/env -i \
    HOME=/root                  \
    TERM="$TERM"                \
    PS1='\u:\w\$ '              \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
    /tools/bin/bash --login +h

  3. 創建目錄

# 現在准備創建 LFS 文件系統裡的一些目錄結構。使用下面的命令創建一個標准的目錄樹:
# 這個目錄樹是基於文件系統目錄結構標准(FHS)

mkdir -pv /{bin,boot,etc/{opt,sysconfig},home,lib/firmware,mnt,opt}
mkdir -pv /{media/{floppy,cdrom},sbin,srv,var}
install -dv -m 0750 /root
install -dv -m 1777 /tmp /var/tmp
mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src}
mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man}
mkdir -v  /usr/{,local/}share/{misc,terminfo,zoneinfo}
mkdir -v  /usr/libexec
mkdir -pv /usr/{,local/}share/man/man{1..8}

case $(uname -m) in
 x86_64) mkdir -v /lib64 ;;
esac

mkdir -v /var/{log,mail,spool}
ln -sv /run /var/run
ln -sv /run/lock /var/lock
mkdir -pv /var/{opt,cache,lib/{color,misc,locate},local}

  4. 創建必需的文件和符號鏈接

ln -sv /tools/bin/{bash,cat,echo,pwd,stty} /bin
ln -sv /tools/bin/perl /usr/bin
ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
ln -sv /tools/lib/libstdc++.so{,.6} /usr/lib
sed 's/tools/usr/' /tools/lib/libstdc++.la > /usr/lib/libstdc++.la
ln -sv bash /bin/sh
ln -sv /proc/self/mounts /etc/mtab


# root 用戶的實際密碼(這裡的 “x” 只是占位符)將在後面創建。
cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/bin/false
daemon:x:6:6:Daemon User:/dev/null:/bin/false
messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
EOF


cat > /etc/group << "EOF"
root:x:0:
bin:x:1:daemon
sys:x:2:
kmem:x:3:
tape:x:4:
tty:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
adm:x:16:
messagebus:x:18:
systemd-journal:x:23:
input:x:24:
mail:x:34:
nogroup:x:99:
users:x:999:
EOF


exec /tools/bin/bash --login +h
touch /var/log/{btmp,lastlog,faillog,wtmp}
chgrp -v utmp /var/log/lastlog
chmod -v 664  /var/log/lastlog
chmod -v 600  /var/log/btmp

  5. 執行shell腳本,完成LFS系統的構建

cd /sources
chmod +x ch6-build.sh
./ch6-build.sh

      master.tar.gz:交叉編譯好的二進制內核、內核模塊、bootloader、GPU(VideoCore)固件

    可根據腳本提示可選擇的安裝、升級。

  6. 再次清理無用內容

logout
chroot $LFS /tools/bin/env -i            \
    HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin   \
    /tools/bin/bash --login
/tools/bin/find /usr/lib -type f -name \*.a \
   -exec /tools/bin/strip --strip-debug {} ';'

/tools/bin/find /lib /usr/lib -type f -name \*.so* \
   -exec /tools/bin/strip --strip-unneeded {} ';'

/tools/bin/find /{bin,sbin} /usr/{bin,sbin,libexec} -type f \
    -exec /tools/bin/strip --strip-all {} ';'

  7. 清理

rm -rf /tmp/*
logout chroot "$LFS" /usr/bin/env -i              \
    HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin     \
    /bin/bash --login
rm -rf /tools rm -f /usr/lib/lib{bfd,opcodes}.a
rm -f /usr/lib/libbz2.a
rm -f /usr/lib/lib{com_err,e2p,ext2fs,ss}.a
rm -f /usr/lib/libltdl.a
rm -f /usr/lib/libfl.a
rm -f /usr/lib/libfl_pic.a
rm -f /usr/lib/libz.a

http://xxxxxx/Linuxjc/1190239.html TechArticle

Copyright © Linux教程網 All Rights Reserved