一. 准备工作

  1. 装有Linux宿主系统的树莓派主板,可参考 Raspberry Pi(树莓派)上安装Raspbian(无路由器,无显示器)

  2. 一张大小至少8G的U盘,PiLFS系统将安装在上面

  3. 参考网址:Linux From Scratch on the Raspberry Pi

  4. 参考网址:Linux From Scratch V7.10

  5. 中文版参考网址:Linux From Scratch Version 7.7-systemd (简体中文版)

  6. 参考文档:LFS-BOOK-7.10.pdf

  7. 参考网址:Raspberry Pi

二. PiLFS 目标架构

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

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

三. 宿主系统需求

  1. 如果未设置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.sh

    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.sh

    如果宿主系统是Raspbian,这些库文件都是缺失的,不用管它

四. 创建新分区

  1. 宿主系统下安装分区工具 gparted,命令:

apt-get install gparted

  2. 利用 gparted 重新划分TF卡,我的TF卡是分为:

    /dev/mmcblk0p1       64M        VFAT          boot分区

    /dev/mmcblk0p2      26.9G      EXT4          宿主系统分区

    /dev/mmcblk0p3       2G          Swap          交换分区

  3. 利用 gparted 划分U盘,划出一个LFS系统分区,我的U盘是分为:

    /dev/sda1  100M  FAT32  boot分区

    /dev/sda2  7.3G   EXT4  LFS系统分区

五. 挂载新分区

export LFS=/mnt/lfs
mkdir -pv $LFS
mount -v -t ext4 /dev/sda2 $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 文件夹

# 编译的临时工具会安装到 $LFS/tools 文件夹,不会成为最终 LFS 系统的一部分。

mkdir -v $LFS/tools

  2. 在宿主系统中创建 /tools 的符号链接,将其指向$LFS/tools

# 创建的符号链接使得编译的工具链总是指向 /tools 文件夹。

ln -sv $LFS/tools /

  3. 添加lfs用户

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

Raspberry Pi(树莓派)上从零开始构建Linux系统(简称PiLFS)(一)的更多相关文章

  1. Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(一)

    一. 准备工作 1. 需要一个Linux宿主系统,例如早先版本的 LFS,Ubuntu/Fedora,SuSE 或者是在你的架构上可以运行的其它发行版 如果想实现Win7与Linux双系统,可参考我的 ...

  2. Linux From Scratch(从零开始构建Linux系统,简称LFS)(一)

    一. 准备工作 1. 需要一个Linux宿主系统,例如早先版本的 LFS,Ubuntu/Fedora,SuSE 或者是在你的架构上可以运行的其它发行版 如果想实现Win7与Linux双系统,可参考我的 ...

  3. Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(三)

    八. 构建LFS系统 1. 准备虚拟内核文件系统 内核会挂载几个文件系统用于自己和用户空间程序交换信息.这些文件系统是虚拟的,并不占用实际磁盘空间, 它们的内容会放在内存里. mkdir -pv $L ...

  4. Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(二)

    七. 构建临时系统 1. 通用编译指南 a. 确认是否正确设置了 LFS 环境变量 echo $LFS b. 假定你已经正确地设置了宿主系统的符号链接: 1)shell 使用的是 bash. 2)sh ...

  5. Linux From Scratch(从零开始构建Linux系统,简称LFS)(三)

    九. 系统配置 1. 安装 LFS-Bootscripts-20150222 软件包包含一套在 LFS 系统启动和关闭时的启动和停止脚本. cd /sources tar -jxf lfs-boots ...

  6. Linux From Scratch(从零开始构建Linux系统,简称LFS)(二)

    七. 构建临时系统 1. 通用编译指南 a. 确认是否正确设置了 LFS 环境变量 echo $LFS b. 假定你已经正确地设置了宿主系统需求和符号链接 c. 对于每个软件包: (1). 确保解压软 ...

  7. 【嵌入式开发】Raspberry Pi 树莓派性能测试

    Raspberry Pi 树莓派性能测试 目录: CPU Linpack基准测试 源码 编译/运行 结果 Whetstone/Dhrystone综合基准测试 源码 编译/运行 结果 OpenSSL安全 ...

  8. 树莓派进阶之路 (012) - 关于Raspberry Pi树莓派无线网卡配置

    Raspberry Pi树莓派无线网卡配置[多重方法备选] 要想让树莓派方便操作,肯定需要配置无线网卡,这样可以大大增强树莓派的移动性和便利性,其实配置无线网卡基本就是和普通linux平台下配置无线网 ...

  9. Raspberry PI 2上的802.11ac网卡驱动编译

    Raspberry PI 2上的802.11ac网卡驱动编译 最近在树莓派2上折腾视频,用来做FPV,但是发现2.4G的控会严重干扰2.4G WIFI,在开控的时候我的台式机+外置USB网卡都频频掉线 ...

随机推荐

  1. artTemplate模板

    1.介绍 新一代 javascript 模板引擎. 2.性能(引) 1.性能卓越,执行速度通常是 Mustache 与 tmpl 的 20 多倍(性能测试) 2.支持运行时调试,可精确定位异常模板所在 ...

  2. iscroll4实现轮播图效果

    相信很多人和我一样,在使用iscroll的是时候只知道可以手动滑动,不知道iscroll的轮播怎么实现一下就是我做的一个轮播效果,亲测有效: 1.html,当然可以动态添加下面的小圆点 <div ...

  3. jquery实现文字上下滚动效果

    文字上下滚动是经常用到的js效果,这里介绍一种上下渐隐渐出的文字展现效果! 代码实现很简单,只需要引入jquery就可以. 代码如下: <!DOCTYPE> <head> &l ...

  4. Android项目--获取系统通讯录列表

    ----------------- 通讯录列表 ----------------- 按常理来说,获取系统通讯录列表,无非就是将通讯录的数据库打开获取数据,适配,添加即可. Cursor cursor; ...

  5. DBMS_LOB包的使用

    DBMS_LOB包的使用 1.  dbms_lob.append( dest_lob  IN  OUT  NOCOPY  BLOB, src_lob  IN  BLOB) dbms_lob.appen ...

  6. 基于MEF的插件框架之总体设计

    基于MEF的插件框架之总体设计 1.MEF框架简介 MEF的全称是Managed Extensibility Framework(MEF),其是.net4.0的组成部分,在3.5上也可以使用.熟悉ja ...

  7. Xamarin.Android

    Xamarin.Android之使用百度地图起始篇 一.前言 如今跨平台开发层出不穷,而对于.NET而言时下最流行的当然还是Xamarin,不仅仅能够让我们在熟悉的Vs下利用C#开发,在对原生态类库的 ...

  8. 【分享】Python学习资源大合集

    地址:http://www.hejizhan.com/html/xueke/520/x520_03.html Python安装软件合集(Windows)(78) Python教程——游戏编程(13) ...

  9. Objective-c 总结(一):OC类的设计

    (一)学习目标: 1.面向对象基本概念: OOP的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在整个解决问题步骤中的行为. 2.熟悉OC类的定 ...

  10. NUnit使用方法

    单元测试是一个成熟项目必不可少的一个环节,NUnit很好的提供了测元测试的一些方法,以下是我得出的一点点经验以及NUnit的一点点实际应用中用到的内容.写的有点儿乱,不懂下面留言.谢谢~ 准备NUni ...