内核编译安装标配一般都是make menuconfig && make &&make install
但在Debian下早就使用make-kpkg自动编译了
所有编译都是在运行Debian的N1(s905d-p230板子)上进行的
下载源码
cd /usr/src
git clone -b khadas-3.14 https://github.com/150balbes/Amlogic_s905-kernel.git
『或者sudo apt-get install dpkg-dev &&apt-get source linux-image-$(uname -r)』
安装编译工具
sudo apt-get install build-essential
可选sudo apt-get install libncurses5 libncurses5-dev linux-kbuild
『或者sudo apt-get build-dep linux-image-$(uname -r) linux-headers-`uname -r`』
『或者yum groupinstall "Development Tools"』
编译配置
cd /usr/src/linux-3.14.29
make mrproper
make clean
cp /boot/config-3.14.29 /usr/src/linux-3.14.29/.config
『或者make meson64_defconfig 生成.config,meson64_defconfig在/arch/arm64/configs/目录下根据板子选』
cd /usr/src/linux-3.14.29
make menucongfig
跟据需要选择模块驱动isofs/VFP/F2FS/cramfs/netfilter/MULTIPATH
make
make install
cp arch/arm64/boot/Image /boot/zImage
rm -rf /lib/modules
make modules
make modules_install
板子/boot/dtb目录下需要对应的dtb文件才能启动
扩展说明:
编译指定模块
make prepare
make scripts
make M=net/ipv4/ CONFIG_TCP_CONG_BBR=m modules
make M=drivers/usb/class CONFIG_USB_PRINTER=m modules
复制模块到对应目录并加载
cp tcp_bbr.ko /lib/modules/`uname -r`/kernel/net/ipv4
echo 'kernel/net/ipv4/tcp_bbr.ko:' >> /lib/modules/`uname -r`/modules.dep
加载模块时出现invalid module format的错误
depmod
modprobe tcp_bbr
dmesg查看log错误内容发现错误原因是version magic版本不一致或crc校验不通过
modinfo tcp_bbr查看本机模块和新编译模块version magic版本信息
示例sch_fq: version magic '3.14.29 SMP preempt mod_unload aarch64' should be '3.14.29-aml-s9xxx SMP preempt mod_unload aarch64'
可见内核版本后缀不一样,重新编译模块时添加版本后缀即可
make LOCALVERSION="-aml-s9xxx"
PC机下交叉编译:
apt-get install gcc make pkg-config git bison flex libelf-dev libssl-dev libncurses5-dev
wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
tar -Jxvf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
export ARCH=arm64
export CROSS_COMPILE=/root/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
编译后遇到install安装时指定路径避免影响宿主系统
make install INSTALL_PATH=/mnt/boot/
make modules_install INSTALL_MOD_PATH=/mnt/
下载源码
cd /usr/src
git clone -b khadas-3.14 https://github.com/150balbes/Amlogic_s905-kernel.git
安装编译工具
sudo apt-get install build-essential kernel-package fakeroot
可选sudo apt-get install libncurses5 libncurses5-dev libssl-dev bc
编译配置
cd /usr/src/linux-3.14.29
make-kpkg clean
cp /boot/config-3.14.29 /usr/src/linux-3.14.29/.config
cd /usr/src/linux-3.14.29
make oldconfig 备份.config
make menucongfig
跟据需要选择模块驱动isofs/VFP/F2FS/cramfs/netfilter/MULTIPATH
fakeroot make-kpkg --initrd --append-to-version=-oxnas kernel_image kernel_headers
编译好的内核在上一层目录包括linux-headers-...deb和linux-image-...deb两个文件
注意--append-to-version就是让我们来指定一个额外的内核版本号不能使用“_”,内核模块位于/lib/modules子文件夹下,创建新内核时会在/lib/modules文件夹下创建一个新的子文件夹来保存它自己的模块『手动创建Ramdisk (以pogoplug pro v2板子处理器为PLX NAS-7820为例)
内核将ramdisk即initrd.img当作根文件来安装,然后再利用这个根文件系统上的驱动来真正安装根文件系统,使用vi编辑/boot/config-4.4.133-oxnas文件。将代码CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"__这句话凝视掉(在句首用#),否则不会成功,接下来运行
mkinitramfs -o /boot/initrd.img-4.4.133-oxnas 4.4.133-oxnas
其中4.4.133-oxnas是执行完make modules_install后在/lib/modules下新生成的文件夹
将kernel和initrd压缩为可u-boot引导启动
mkimage -A arm -O linux -T kernel -C none -a 0x60008000 -e 0x60008000 -n Linux-4.4.133-oxnas -d /boot/vmlinuz-4.4.133-oxnas /boot/uImage
mkimage -A arm -O linux -T ramdisk -C gzip -a 0x60000000 -e 0x60000000 -n initramfs-4.4.133-oxnas -d /boot/initrd.img-4.4.133-oxnas /boot/uInitrd』