编译选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1、
Location:
->Settings
->vi-style line editor commands
# 选中

2、
Location:
->Settings
->Build static binary (no shared libs)
# 这个主要是选择是否动态编译,不能选

3、
Location:
->Linux Module Utilities
->Simplified module
# 不能选

4、
Location:
->Linux System Utilities
->mdev(16kb)
# 下面的全选
5、
Location:
->Settings
->Support Unicode
->Check $LC_ALL, $LC_CTYPE, $LANG environment variables
# 选择这两个

内核启动脚本

热插拔管理

热插拔主要由/proc/sys/kernel/hotplug控制
主要两种方法:mdev和udev

rcS

1
2
3
4
5
6
7
8
9
10
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
export PATH LD_LIBRARY_PATH

mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

fstab

1
2
3
4
#<file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0

这里巨坑
一定要将编译工具链下的lib全部拷贝,不管so.什么
file 一下看看是不是有什么文件没有拷过去,一定要把需要的全部拷贝,最重要的就是sh

附录

移植脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66

export CROSS_COMPILE=/home/ygc/Desktop/linux-gcc/2021-6ull/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-
export ARCH=arm
curpath=$(pwd)

build() {

if [ $1 == "clean" ];
then
echo "clean"
make clean
fi
make defconfig
# make menuconfig 添加配置
cp ./rootfs-re ./rootfs -rf
make -j$(nproc)
make install CONFIG_PREFIX=${curpath}/rootfs/output

cp -rf ${curpath}/rootfs-init/* ${curpath}/output/
rm -rf /home/ygc/Desktop/project/nfs/*
cp -rf ${curpath}/rootfs/output /home/ygc/Desktop/project/nfs/
mv /home/ygc/Desktop/project/nfs/output /home/ygc/Desktop/project/nfs/rootfs

cd /home/ygc/Desktop/project/nfs/rootfs
mkdir -p lib
cp /home/ygc/Desktop/linux-gcc/2021-6ull/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/arm-none-linux-gnueabihf/lib/* lib/ -d
cp /home/ygc/Desktop/linux-gcc/2021-6ull/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/arm-none-linux-gnueabihf/lib/*.* lib/ -d
cp /home/ygc/Desktop/linux-gcc/2021-6ull/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/arm-none-linux-gnueabihf/libc/lib/* lib/ -d
cp /home/ygc/Desktop/linux-gcc/2021-6ull/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/arm-none-linux-gnueabihf/libc/lib/*.* lib/ -d

mkdir -p usr/lib
cp /home/ygc/Desktop/linux-gcc/2021-6ull/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/arm-none-linux-gnueabihf/libc/usr/lib/*.a usr/lib/ -d
cp /home/ygc/Desktop/linux-gcc/2021-6ull/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/arm-none-linux-gnueabihf/libc/usr/lib/*.so usr/lib/ -d

mkdir -p dev bin mnt proc sys root tmp var etc

sudo chmod 777 -Rf /home/ygc/Desktop/project/nfs/rootfs
}

if [ -f "rootfs" ]; then
echo "rootfs exists"
else
echo "rootfs does not exist"
if [ -f "busybox-1.35.0.tar.bz2" ];then
echo "busybox-1.35.0.tar.bz2 exists"
if [ -d "rootfs" ]; then
echo "rootfs exists"
cd rootfs
build $1
else
echo "rootfs does not exist"
tar -xvjf busybox-1.35.0.tar.bz2
mv busybox-1.35.0 rootfs
cd rootfs
build $1
fi

else
echo "busybox-1.35.0.tar.bz2 does not exist"
wget https://busybox.net/downloads/busybox-1.35.0.tar.bz2
tar -xvjf busybox-1.35.0.tar.bz2
mv busybox-1.35.0 rootfs
cd rootfs
build $1
fi
fi