Raspberry Pi(树莓派)上从零开始构建Linux系统(简称PiLFS)

河的第三条岸 2017-01-14

一. 准备工作

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

到安科网资源站下载:

------------------------------------------分割线------------------------------------------

具体下载目录在 /2017年资料/1月/14日/Raspberry Pi(树莓派)上从零开始构建Linux系统(简称PiLFS)/

------------------------------------------分割线------------------------------------------ 

二. PiLFS 目标架构

PiLFS主要支持 ARM(64位)的目标架构。

假如按照本文的默认方式构建,那么你将得到一个“纯” 64 位系统————这意味着你仅能够执行64 位的程序。

三. 宿主系统需求

1. 如果宿主系统是Raspbian,设置 root 密码,并且以root用户登录

sudo passwd root
su - root

2. 请执行以下命令,查看宿主机的各个软件包的版本以及编译环境是否准备妥当:

Raspberry Pi(树莓派)上从零开始构建Linux系统(简称PiLFS) 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
.sh
 
View Code

a. 如果宿主系统是Raspbian,你会发现缺少了四个包,使用命令行增加:

apt-get update
apt-get install bison gawk m4 texinfo

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

ln -sf bash /bin/sh

3. 同时,还请进行库文件的一致性检查,这些文件应该要么都在或者是都缺失,而不应该只有一两个。

Raspberry Pi(树莓派)上从零开始构建Linux系统(简称PiLFS)
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
.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/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. 设置环境Raspberry Pi(树莓派)上从零开始构建Linux系统(简称PiLFS)

 

相关推荐