对于有LINUX内核技术基础的兰友来说,可以尝试按照本文的内容自己构建LINUX内核,修改编译选项、调整代码,然后进行编译和更新,做各种试验。
1. 下载内核
下载地址:https://gedu.oss-cn-beijing.aliyuncs.com/Products/YourLand/Release/OpenSourceKernel/opsrckrn.tar.gz
完成内核的下载后需要对压缩包进行解压。
2. 准备构建环境
2.1 使用AMD64架构机器
设置环境变量
CROSS_COMPILE=XXXX
。
交叉工具链设置示例:
1. 添加交叉编译工具链的可执行文件路径
/path/to/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu/bin
bin目录下有如下的内容
ls toolchains/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu/bin/
aarch64-none-linux-gnu-addr2line aarch64-none-linux-gnu-elfedit aarch64-none-linux-gnu-gcov aarch64-none-linux-gnu-ld aarch64-none-linux-gnu-ranlib
aarch64-none-linux-gnu-ar aarch64-none-linux-gnu-g++ aarch64-none-linux-gnu-gcov-dump aarch64-none-linux-gnu-ld.bfd aarch64-none-linux-gnu-readelf
aarch64-none-linux-gnu-as aarch64-none-linux-gnu-gcc aarch64-none-linux-gnu-gcov-tool aarch64-none-linux-gnu-ld.gold aarch64-none-linux-gnu-size
aarch64-none-linux-gnu-c++ aarch64-none-linux-gnu-gcc-11.2.1 aarch64-none-linux-gnu-gdb aarch64-none-linux-gnu-lto-dump aarch64-none-linux-gnu-strings
aarch64-none-linux-gnu-c++filt aarch64-none-linux-gnu-gcc-ar aarch64-none-linux-gnu-gdb-add-index aarch64-none-linux-gnu-nm aarch64-none-linux-gnu-strip
aarch64-none-linux-gnu-cpp aarch64-none-linux-gnu-gcc-nm aarch64-none-linux-gnu-gfortran aarch64-none-linux-gnu-objcopy
aarch64-none-linux-gnu-dwp aarch64-none-linux-gnu-gcc-ranlib aarch64-none-linux-gnu-gprof aarch64-none-linux-gnu-objdump
2. make时添加交叉编译参数
CROSS_COMPILE=aarch64-none-linux-gnu-
2.2 使用ARM64架构机器
使用原生ARM64架构的机器进行编译时,推荐使用的gcc
的版本是gcc-11
。
gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/11/lto-wrapper
Target: aarch64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-4ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=aarch64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-checking=release --build=aarch64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.4.0 (Ubuntu 11.4.0-4ubuntu1)
3 更新内核配置选项
通过下方的命令指定内核选项配置文件,并将内核选项配置文件中的内容更新到.config
文件内。
如果缺少linux_opsrc_rk3588_defconfig
请通过下方链接下载文件。
make ARCH=arm64 LOCALVERSION=-opensources-rk3588 linux_opsrc_rk3588_defconfig
其中linux_opsrc_rk3588_defconfig
是指定的文件名,手动指定的文件需要在arch/arm64/configs/
目录内存在。
ls arch/arm64/configs/
amlogic_gki.fragment gki_defconfig px30_linux_robot_defconfig rk3326_linux_robot_defconfig rk3588_linux.config rockchip_gki.fragment
db845c_gki.fragment hikey960_gki.fragment rk1808_linux_defconfig rk3358_linux.config rk3588_nvr.config rockchip_linux_defconfig
defconfig linux-rockchip-rk356x-legacy.config rk1808_x4_linux_defconfig rk3399pro_npu_defconfig rockchip_cros_defconfig rockchip_rt.config
fips140_gki.fragment linux_opsrc_rk3588_defconfig rk3308_linux_defconfig rk3568_nvr.config rockchip_defconfig rockpi4_defconfig
fips140_gki_eval_testing.fragment px30_linux_defconfig rk3326_linux.config rk3588_edge.config rockchip_gki.config
4. 编译内核
可以使用下面的命令对Image
、内核模块、设备树进行编译。
make ARCH=arm64 LOCALVERSION=-opensources-rk3588 Image modules dtbs
5. 更新内核启动文件
完成内核的编译后,可以将生成的文件更新到幽兰内。
内核启动文件替换位置:/boot/Image
6. 设置grub
对于使用双剑镜像版本的用户,内核文件是根据grub.cfg
中的设置进行加载的,请确保grub.cfg
文件中所使用的内核文件路径是你所期望的。
grub.cfg
文件所在位置:/boot/grub/grub.cfg
grub.cfg文件内容(在下面可以看到不同的选择设置不同的内核文件Image-xxx和initrd.img):
set debug="loader,mm"
set term="vt100"
set default="0"
set timeout="1"
search --set=root --fs-uuid 8243-61A8
menuentry 'Boot YourLand by GEDU Kernel' {
linux /Image-gedu resume=UUID=4cb35644-114d-4566-a1f2-01d986a77985 root=PARTUUID=9ab6bd62-ac07-a64f-83bc-8ee1accf4bec noresume psi=1 splash label=debug rootwait verbose debug nokaslr
initrd /initrd.img-5.10.110-rockchip-rk3588
}
menuentry 'Boot YourLand by My Kernel' {
linux /Image-opsrc resume=UUID=4cb35644-114d-4566-a1f2-01d986a77985 root=PARTUUID=9ab6bd62-ac07-a64f-83bc-8ee1accf4bec noresume psi=1 splash label=debug rootwait verbose debug nokaslr
initrd /initrd.img-5.10.110-opensources-rk3588
}
你可以把上面的My换成你自己的名字。
作者:沈根成 创建时间:2024-01-09 09:27
最后编辑:Zhang Yinkui 更新时间:2024-12-20 17:01
最后编辑:Zhang Yinkui 更新时间:2024-12-20 17:01