Raspberry Pi (Raspberry Pi) builds a Linux system (PiLFS) from scratch (I), raspberrypilfs
I. Preparations
1. Raspberry Pi motherboard with Linux host system installed, refer to Raspberry Pi (Raspberry Pi) to install Raspbian (no router, no Monitor)
2. Reference URL: Linux From Scratch on the Raspberry Pi
3. Reference URL: Linux From Scratch Version Development
Ii. Target architecture of PiLFS
PiLFS mainly supports the target architecture of ARM (64-bit.
If it is built by default in this article, you will get a "pure" 64-bit system-this means that you can only execute 64-bit programs.
Iii. host system requirements
1. If the host system is Raspbian, set the root password,And log on as the root user.
sudo passwd root
su - root
2. Run the following command to check whether the software packages of the host machine and the compiling environment are ready:
cat > version-check.sh << "EOF"#!/bin/bash# Simple script to list version numbers of critical development toolsexport LC_ALL=Cbash --version | head -n1 | cut -d" " -f2-4MYSH=$(readlink -f /bin/sh)echo "/bin/sh -> $MYSH"echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash"unset MYSHecho -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-bison --version | head -n1if [ -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" fibzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2diff --version | head -n1find --version | head -n1gawk --version | head -n1if [ -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" figcc --version | head -n1g++ --version | head -n1ldd --version | head -n1 | cut -d" " -f2- # glibc versiongrep --version | head -n1gzip --version | head -n1cat /proc/versionm4 --version | head -n1make --version | head -n1patch --version | head -n1echo Perl `perl -V:version`sed --version | head -n1tar --version | head -n1makeinfo --version | head -n1xz --version | head -n1echo 'int main(){}' > dummy.c && g++ -o dummy dummy.cif [ -x dummy ] then echo "g++ compilation OK"; else echo "g++ compilation failed"; firm -f dummy.c dummyEOFbash version-check.sh
View Code
A. if the host system is Raspbian, you will find that four packages are missing. Use the command line to add:
apt-get updateapt-get install bison gawk m4 texinfo
B. At the same time,/bin/sh points to dash and uses the command line to modify the point to bash:
ln -sf bash /bin/sh
3. At the same time, check the consistency of database files. These files should be either present or missing, rather than one or two files.
cat > library-check.sh << "EOF"#!/bin/bashfor lib in lib{gmp,mpfr,mpc}.la; do echo $lib: $(if find /usr/lib* -name $lib| grep -q $lib;then :;else echo not;fi) founddoneunset libEOFbash library-check.sh
View Code
If the host system is Raspbian, these library files are missing and you don't need to worry about it.
4. Create a New Partition
1. Install the partition tool gparted in the host system. command:
apt-get install gparted
2. Use gparted to re-divide the TF card and draw an LFS system partition. My TF card is divided:
/Dev/mmcblk0p1 64 M FAT32 boot Partition
/Dev/mmcblk0p2 16.9G EXT4 host system partition
/Dev/mmcblk0p3 2G Swap Partition
/Dev/mmcblk0p4 10G EXT4 LFS system partition
5. Mount new partitions
Export LFS =/mnt/lfsmkdir-pv $ LFS mount-v-t ext4/dev/mmcblk0p4 $ LFS # If you are using swap partitions, run the swapon command to ensure that/sbin/swapon-v/dev/mmcblk0p3 is enabled.
Vi. software packages and patches
1.root
The user executes the following command to create$ LFS/sources directory
mkdir -v $LFS/sources
2. Set the directory write permission and sticky Mode
chmod -v a+wt $LFS/sources
"Sticky mode" means that even if multiple users have write permission on a directory, only the owner of the file can delete the files in a sticky directory.
3. download the software packages and Patches required to build PiLFS
wget http://www.intestinate.com/pilfs/scripts/wget-listwget -i wget-list -P $LFS/sources
VII. Final preparations
1. Create a $ LFS/tools Folder
# Run the following command as a root user: # The compiled temporary tool will be installed in the $ LFS/tools Folder and will not become part of the final LFS system. Mkdir-v $ LFS/tools
2. Create/tools
To point to $ LFS/tools.
# Run the following command as a root user: # The created Symbolic Link always points to the/tools Folder. Ln-sv $ LFS/tools/
3. Add an lfs user
# Run the following command as the root user to add new groups and new users: # When a root user logs on, a small error may damage or destroy the entire system. Groupadd lfs # Add new group useradd-s/bin/bash-g lfs-m-k/dev/null lfs # Add new user passwd lfs # Set the password chown-v lfs for the user $ LFS/tools # grant all permissions to access the $ LFS/tools Folder chown-vR lfs $ LFS/sources # grant all permissions to access the $ LFS/sources folder and sub-files su- lfs # Switch users
4. Set the environment
# Log On As an lfs user and run the following two commands to create two startup files for bash shell. # When logging on as an lfs user, the initial shell is usually a logged-on shell # It first reads the/etc/profile file of the host (probably including some settings and environment variables), and then. bash_profile file #. the bash_profile file replaces the running shellcat with a completely empty shell> ~ /. Bash_profile <"EOF" exec env-I HOME = $ HOME TERM = $ TERM PS1 = '\ u: \ w \ $ '/bin/bashEOF # The new shell instance is a non-Logon shell and does not read/etc/profile or. the bash_profile file is read. bashrc file cat> ~ /. Bashrc <"EOF" set + humask 022LFS =/mnt/lfsLC_ALL = POSIXLFS_TGT = $ (uname-m)-lfs-linux-gnueabihfPATH =/tools/bin: /usr/binexport LFS LC_ALL LFS_TGT PATHEOF # enable the configuration file source ~ /. Bash_profile
View Code