以在内核代码中添加EmbedSky_hello驱动为例,进行内核编译时候出现了一下几个问题: 1、在 /opt/EmbedSky/linux 2.6.30.4/drivers/char目录下修改“Kconfig”文件,添加如下内容: config EmbedSky_HELLO tristate "TQ2440/SKY2440 Hello Driver" depends on ARCH_S3C2440 help EmbedSky TQ2440/SKY2440 Hello. 后,别忘了在同目录下的“Makefile”文件中添加如下内容: obj-$(CONFIG_EmbedSky_HELLO) +=EmbedSky_hello.o 将原来的 obj-$(CONFIG_TQ2440_HELLO) +=EmbedSky_hello.o 一句删除。 然后,按照常理,在/opt/EmbedSky/linux 2.6.30.4/目录下运行#make menuconfig命令后在内核配置界面里选择Device Drivers -->....Character devices -->后会出现如下选项: <>TQ2440/SKY2440 Hello Driver 但在刚解压的内核中进行上述工作,最后不会出现上面说的配置选项,这是为什么呢?原因在于没有进行系统类型的设置,也就是没有和上面的“depends on ARCH_S3C2440”搭配好。现在需要进行如下工作: #make menuconfig命令进入内核配置界面,选择“Load an Alternate Configuration File”,输入路径“arch/arm/configs/s3c2440_defconfig”,回车进入到“System Type”选项配置菜单,将S3C2440 Machines选项下做如下选择:只选择SMDK2440和SMDK2440 withS3C2440 CPU module两个选项。然后退回最初的配置菜单,选择最下面的“Save an Alternate Configuration File”,将其保存为“.config”文件。在编译系统时会自动调用该文件。 再进行驱动配置就会出现“ <>TQ2440/SKY2440 Hello Driver”选项了。 2、在内核目录下运行命令“make SUBDIR=drivers/char/ modules”生成EmbedSky_hello.ko文件(在drivers/char/目录下),将其复制到开发板 /lib 目录下,按常理当运行“#insmod EmbedSky_hello.ko”加载模块命令后,会显示EmbedSky_hello.c文件中printk指令所定义的出输出内容。但是事与愿违,出现了如下错误提示: 出错原因:模块版本与内核版本不匹配! 解决办法:导入预设配置信息,进入menuconfig 继续配置General config ->......Local version -> 加入如下内容:“-EmbedSky ”退出保存为 .config ,重新编译内核,将EmbedSky_hello.ko复制到板子,然后再“#insmod EmbedSky_hello.ko,然后就congratulations,you succeed啦!^_^
纯属引用高人的这个博客,特声明:
|
为什么有depends on ARCH_S3C2440后,在配置图像界面就看不到选项了
TQ2440的EmbedSky_hello模块编译内核问题及解决
2009-10-25 20:22