我们拿到全新内核的时候,一定要注意几个步骤,好像并没有几个书上由我写的这么详细的,基本上都是给一个大体的思路,但是到了真刀真枪上场的时候,真的是问题百出。以下讲围绕这几个方面进行讨论。
a) 修改顶层Makefile
b) Machine ID的处理( 在arch/arm/ 的mach中增加C文件 -> 修改Kconfig -> 修改Makefile文件 )
c) 在arch/arm/tools/mach-types 文件中增加Machine ID
3.1.1 修改顶层的Makefile
Makefile一共要修改2个地方即可:
修改arch架构: ARCH ?= arm 注意,arm这几个后面不要打空格啊,要不然make的时候不识别。
刚才刚刚添加了新的mach-mini2451.c的文件,就要在和这个文件同一个目录下的Kconfig中加入这个的配置项,我给出我的配置项:
config MACH_MINI2451
bool"MINI2451BYDELVIS"#select S3C24XX_SMDKselect S3C_DEV_FB
select S3C_DEV_HSMMC
select S3C_DEV_HSMMC1
select S3C_DEV_NAND
select S3C_DEV_USB_HOST
select S3C2416_SETUP_SDHCI
select WIRELESS_EXT
select WEXT_SPY
select WEXT_PRIV
select AVERAGE
help
Say Y here if you are using an FriendlyARM MINI2451
在Kconfig中增加这个字符串,在顶层进行make menuconfig的时候,这个选项就会出来,我们在make menuconfig的时候,最先应该的就是选择板子的架构
1) System Type –> ARM sytem type( Samsung S3C24XX Socs ) –> Samsung S3C24XX SoCs
选择后返回上一层
2)SASUNG S3C24XX SoCs Support —> 先选上 SASUNG S3C2416/S3C2450 —> 下面自动出 MINI2451BYDELVIS 一会儿说这个菜单的显示逻辑如何的
3)Exit 并且 Save 成为.config
我这里,使用厂家提供的mini2451_linux_config文件,在上面进行修改,首先就把运行把这个config文件复制过来,并且名字改为.config覆盖原有的.config文件,然后进行make menucofig,在system type中如同上面讲述的选择正确的板子的型号。如果你没有选择,就会出现这样的异常,在内核编译到最后的时候,出现编译kernel出现no machine record defined 错误。然后一些鬼一样的网站给出馊主意,还被大量的博客转载,简直就是误导人,你经过google或者百度,会有一个这样的解决方案 :
这里给一个!反!面!教!材!:
放狗搜后,按照如下方法可以解决。将arch/arm/kernel/vmlinux.lds的最后两行(如下),给注释起来,但都没说是为了什么
ASSERT((__proc_info_end - __proc_info_begin), “missing CPU support”),
ASSERT((__arch_info_end - __arch_info_begin), “no machine record defined”)
反面教材来源:uncompressing linux ………………………………………….后没反应解决办法 前半部分