Linux内核编译for Amlogic S905D

内核编译安装标配一般都是make menuconfig  && make  &&make install

但在Debian下早就使用make-kpkg自动编译了

所有编译都是在运行Debian的N1(s905d-p230板子)上进行的

1.手动编译

下载源码

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/

2.自动编译

下载源码

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』

你可能感兴趣的:(Debian,内核编译,ARM开发板,模块编译,Amogic,905D)