文章目录
前言
linux开发人员常常是基于ubuntu、centos、debian等发行版环境开发应用程序,不会很深入的去了解linux环境本身是怎样组成的,这个系列文章通过对LFS(Linux From Scratch)项目的实践,展现了一个嵌入式linux发行版的完整构建过程。
一、主机环境要求
主机环境为wsl2 + debian12
1. 主机工具列表
bash-4.0
binutils-2.20
bzip2-1.0.5
coreutils-8.1
diffutils-3.0
findutils-4.4.0
gawk-3.1
GCC-4.4
glibc-2.11
grep-2.6
gzip-1.3
m4-1.4.16
make-3.81
ncurses5
patch-2.6
sed-4.2.1
sudo-1.7.4p4
tar-1.23
texinfo-4.13
2. 检查脚本
cat > version-check.sh << "EOF"
#!/bin/bash
# Simple script to list version numbers of critical development tools
set -e
bash --version | head -n1 | cut -d" " -f2-4
echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
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
gcc --version | head -n1
ldd $(which ${SHELL}) | grep libc.so | cut -d ' ' -f 3 | ${SHELL} | head -n 1 \
| cut -d ' ' -f 1-10
grep --version | head -n1
gzip --version | head -n1
m4 --version | head -n1
make --version | head -n1
echo "#include <ncurses.h>" | gcc -E - > /dev/null
patch --version | head -n1
sed --version | head -n1
sudo -V | head -n1
tar --version | head -n1
makeinfo --version | head -n1
EOF
bash version-check.sh
3. 补齐安装包
apt install libncurses-dev
apt install texinfo
最终版本信息如下:
bash, version 5.2.15(1)-release
Binutils: (GNU Binutils for Debian) 2.40
bzip2, Version 1.0.8, 13-Jul-2019.
Coreutils: 9.1
diff (GNU diffutils) 3.8
find (GNU findutils) 4.9.0
GNU Awk 5.2.1, API 3.2, PMA Avon 8-g1, (GNU MPFR 4.2.0, GNU MP 6.2.1)
gcc (Debian 12.2.0-14) 12.2.0
GNU C Library (Debian GLIBC 2.36-9+deb12u4) stable release version 2.36.
grep (GNU grep) 3.8
gzip 1.12
m4 (GNU M4) 1.4.19
GNU Make 4.3
GNU patch 2.7.6
sed (GNU sed) 4.9
Sudo version 1.9.13p3
tar (GNU tar) 1.34
texi2any (GNU texinfo) 6.8
二、源码准备
1. 嵌入式linux发行版需要的软件包
binutils
busybox
bootscripts
gcc
gmp
iana-etc
kernel
mpc
mpfr
musl
2. 创建代码仓
root权限执行以下操作:
mkdir -p /opt/clfs
export CLFS=/opt/clfs
chmod 777 ${CLFS}
mkdir -v ${CLFS}/sources
mkdir -v ${CLFS}/archive
3. 下载软件包
wget http://ftp.gnu.org/gnu/binutils/binutils-2.27.tar.bz2 -P ${CLFS}/archive
wget http://busybox.net/downloads/busybox-1.24.2.tar.bz2 -P ${CLFS}/archive
wget https://github.com/cross-lfs/bootscripts-embedded/archive/master.tar.gz -P ${CLFS}/archive
wget http://gcc.gnu.org/pub/gcc/releases/gcc-6.2.0/gcc-6.2.0.tar.bz2 -P ${CLFS}/archive
wget http://ftp.gnu.org/gnu/gmp/gmp-6.1.1.tar.bz2 -P ${CLFS}/archive
wget http://sethwklein.net/iana-etc-2.30.tar.bz2 -P ${CLFS}/archive
wget http://www.kernel.org/pub/linux/kernel/v4.x/linux-4.9.22.tar.xz -P ${CLFS}/archive
wget http://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz -P ${CLFS}/archive
wget http://ftp.gnu.org/gnu/mpfr/mpfr-3.1.4.tar.bz2 -P ${CLFS}/archive
wget http://www.musl-libc.org/releases/musl-1.1.16.tar.gz -P ${CLFS}/archive
wget http://patches.clfs.org/embedded-dev/iana-etc-2.30-update-2.patch -P ${CLFS}/archive
wget http://downloads.sourceforge.net/libpng/zlib-1.2.8.tar.gz -P ${CLFS}/archive
wget http://matt.ucc.asn.au/dropbear/releases/dropbear-2013.60.tar.bz2 -P ${CLFS}/archive
wget http://www.red-bean.com/~bos/netplug/netplug-1.2.9.2.tar.bz2 -P ${CLFS}/archive
wget http://patches.clfs.org/embedded-dev/netplug-1.2.9.2-fixes-1.patch -P ${CLFS}/archive
wget https://hewlettpackard.github.io/wireless-tools/wireless_tools.29.tar.gz -P ${CLFS}/archive
三、 环境准备
1. 用户权限配置
export CLFS=/opt/clfs
groupadd clfs
useradd -s /bin/bash -g clfs -m -k /dev/null clfs
passwd clfs
chown -Rv clfs ${CLFS}
su - clfs # 至此由root用户切换为clfs用户
2. bash环境配置
cat > ~/.bash_profile << "EOF"
exec env -i HOME=${HOME} TERM=${TERM} PS1='\u:\w\$ ' /bin/bash
EOF
cat > ~/.bashrc << "EOF"
set +h
umask 022
CLFS=/opt/clfs
LC_ALL=POSIX
PATH=${CLFS}/cross-tools/bin:/bin:/usr/bin
export CLFS LC_ALL PATH
EOF
source ~/.bash_profile
总结
本章罗列了制作精简的嵌入式linux发行版的主机环境需要的软件包和发行版本身需要的软件包,同时对编译前的环境做了配置。