22-Openwrt 使用外部kernel和kernel_config
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了22-Openwrt 使用外部kernel和kernel_config相关的知识,希望对你有一定的参考价值。
参考技术A 使用外部内核源码的方式,我们一遍会编译一遍openwrt,然后将 build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/linux-4.19.81/ 源码拷贝到,如../extkernel/4.4.198目录下。然后make menuconfig开启 Use external kernel tree 选项即可。
内核配置要修改是,我们会使用make kernel_menuconfig来进行配置。
先看下原本内核.config的生成逻辑,make kernel_menuconfig的时候,会通过kconfig.pl脚本将generic和mediatek下的config-4.19合并成一个.config给内核使用。
当我们kernel_menuconfig配置完之后,退出的时候就会保存使用kconfig.pl脚本重新将配置文件保存到config-4.19文件中。
所以我们要做的是将上报的到处和导入过程,改成我们自己配置的kernel_config文件。
在 config/Config-devel.in 里面添加KERNEL_CONFIG的选项支持外部配置
然后make menuconfig填入我们要用的外部配置文件路径名称
修改导入过程,在 19.07/include/target.mk 里面添加导入外部kernel config内容
修改保存过程, 19.07/include/kernel-build.mk 里面添加保存外部kernel config内容
之后,再次make kernel_menuconfig就可以看到,导入过程如下:
保存过程如下:
移植kernel-3.10.79 支持 yaffs
网站: http://www.yaffs.net/
获取方法: 执行git clone git://www.aleph1.co.uk/yaffs2
解压:tar zxf yaffs_source.tar.gz
打补丁:
#cd /work/tmp/yaffs2 // cd yaffs-dir #./patch-ker.sh c m ~/mini2440/linux-3.10.79 // ./patch-ker.sh c m linux-tree
make menuconfig File Systems ---> Miscellaneous filesystems ---> [*]YAFFS2 file system support make uImage
出错:fs/yaffs2/yaffs_vfs.c:3398: error: implicit declaration of function ‘create_proc_entry‘
原因:编译fs/yaffs2/yaffs_vfs.c时出现错误,function ‘create_proc_entry‘没有申明。
原来这个接口在linux-3.10被删除了,应该使用proc_create代替。
修改:
vim fs/yaffs2/yaffs_vfs.c
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) 修改为#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)) #define YAFFS_NEW_PROCFS #include <linux/seq_file.h> #endif
问题2:
end_request: I/O error, dev mtdblock4, sector 0
移植内核时出现了这种错误,这种错误通常是由校验造成的.这种情况的解决办法为:
禁止Flash ECC校验
我们的内核都是通过UBOOT写到Nand Flash的, UBOOT通过的软件ECC算法产生ECC校验码, 这与内核校验的ECC码不一样, 内核中的ECC码是由S3C2410中Nand Flash控制器产生的. 所以, 我们在这里选择禁止内核ECC校验.
修改drivers/mtd/nand/s3c2410.c 文件:
vi drivers/mtd/nand/s3c2410.c
找到s3c2410_nand_init_chip()函数,在该函数体最后加上一条语句:
chip->ecc.mode = NAND_ECC_NONE;
以上是关于22-Openwrt 使用外部kernel和kernel_config的主要内容,如果未能解决你的问题,请参考以下文章
Kernels and image sets for an operator and its dual
LinearSVC 和 SVC(kernel="linear") 有啥区别?
获取/检查进程 win32 的内部 kernel32 状态(为了安全使用 TerminateThread )