一、Linux内核的主要功能
Linux内核的主要功能:进程管理、内存管理、驱动、系统调用
二、Linux内核编译流程
方法一:
1. 运行 build.sh 脚本, 记得加 sudo 权限
gyj@gyj-virtual-machine:~/orangepi-build$ sudo ./build.sh
2. 选择 Kernel package, 然后回车
3. 然后会提示是否需要显示内核配置界面, 如果不需要修改内核配置, 则选择第一个即可, 如果需要修改内核配置, 则选择第二个
4. 接着选择开发板的型号
5. 查看编译生成的内核相关的 deb 包
gyj@gyj-virtual-machine:~/orangepi-build$ ls output/debs/linux-*
output/debs/linux-dtb-next-sun50iw9_3.1.0_arm64.deb
output/debs/linux-image-next-sun50iw9_3.1.0_arm64.deb
output/debs/linux-headers-next-sun50iw9_3.1.0_arm64.deb
6. 重复编译 kernel 时, 使用下面的命令无需通过图形界面选择, 可以直接开始编译kernel
sudo ./build.sh BOARD=orangepizero2 BRANCH=next BUILD_OPT=kernel
KERNEL_CONFIGURE=no
7. 如果对内核做了修改, 可以使用下面的方法来更新开发板 linux 系统的内核和内核模块
scp linux-image-next-sun50iw9_3.1.0_arm64.deb test@192.168.0.113:/home/orangepi/
sudo apt purge -y linux-image-next-sun50iw9
sudo dpkg -i linux-image-next-sun50iw9_3.1.0_arm64.deb
sudo reboot -f
方法二:
1. 清理旧配置文件及生成的文件
sudo apt-get install ccache #安装ccahe,用于编译加速
export PATH=$PATH:/home/$(whoami)/orangepi-build/toolchains/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin #导入交叉编译环境
make ARCH=arm64 distclean
2. 配置内核, 更新内核依赖属性和新属性, 生成.config
cp ../../external/config/kernel/linux-5.16-sun50iw9-current.config .config #拷贝
默认配置
make ARCH=arm64 CROSS_COMPILE="aarch64-none-linux-gnu-" olddefconfig
•Tips
a. make olddefconfig 的作用是根据已有的 .config 文件生成一个新的 .config 文件,同时更新内核的依赖属性和新属性。它会使用旧的 .config 文件中的参数作为默认参数,不会询问用户的选择。它会将新添加的内核选项设置为默认值,也不会提醒用户。它会将旧的 .config 文件重命名为 .config.old 文件,以备后用。
b. make olddefconfig 的作用和 make oldconfig 类似,但是 make oldconfig 会以交互方式询问用户对新配置的选择,而 make olddefconfig 不会。c. make menuconfig 是基于 Ncurses 图形界面去配置 .config 文件,它可以让用户在一个菜单式的界面中选择和修改内核的各种选项,也可以查看选项的帮助信息,它是一种比较方便和直观的配置方式
3. 编译内核
make -j6 ARCH=arm64 'CROSS_COMPILE=ccache aarch64-none-linux-gnu-'
LOCALVERSION=-sun50iw9 Image modules dtbs
4. 接下来运行
make modules_install INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$PWD/_install
ARCH=arm64 'CROSS_COMPILE=ccache aarch64-none-linux-gnu-' #安装驱动
make install INSTALL_PATH=$PWD/_install/boot #安装内核
或者不走第四步,直接打包成deb包:
sudo cp external/patch/misc/headers-debian-byteshift.patch /tmp
make -j6 bindeb-pkg KDEB_PKGVERSION=3.1.0 KDEB_COMPRESS=xz BRANCH=next
LOCALVERSION="-sun50iw9" KBUILD_DEBARCH=arm64 ARCH=arm64 DEBFULLNAME="Orange Pi" CROSS_COMPILE="ccache aarch64-none-linux-gnu-”
5.如果对内核做了修改, 可以使用下面的方法来更新开发板 linux 系统的内核和内核模块
scp linux-image-next-sun50iw9_3.1.0_arm64.deb test@192.168.0.113:/home/orangepi/
sudo apt purge -y linux-image-next-sun50iw9
sudo dpkg -i linux-image-next-sun50iw9_3.1.0_arm64.deb
sudo reboot -f