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 )

如何使用kernel / perf_event *。[hc]分析框架?

linux kernel的cmdline參数解析原理分析

Opensuse 11.0 内存错误