就自己在学习驱动过程中的一些错误和解决办法的记录:
我的操作环境是虚拟机 Ubuntu 10.10 。 测试内核 2.6.28 和 2.6.34
今天就只写菜鸟最简单的:如何在make menuconfig 后能添加自己的驱动模块。网上Linux驱动学习的帖子都太多了,但是写给菜鸟的很少。而我自己在写完成make menuconfig时也入到了不少的错误。现在将自己的错误记录如下,只为帮助后来者。
1、修改顶层Makefile时出现的错误
在设置cpu类型,修改交叉编译器路径的时候修改为
ARCH ?= arm
CROSS_COMPILE ?= /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-
时,进行make menuconfig 测试的时候在 这一行报错,报错提示arm不能为一个目录
出现原因和解决办法:在这里极有可能是因为你在 ?= arm 的最后面有一个空格,删掉空格就可以正常编译
这个错误一般很难发现。
2、添加 ledtest 驱动模块到make menuconfig 菜单
在这一步我出现错误是 那网上的添加方法添加好了,make menuconfig 后并没有出现我添加的 ledtest 的驱动模块选项。最后我发现了其中的错误,网上的其他帖子并未提及。
首先: 我先来描述一下我最开始尝试的方法,
1)、在drivers下添加自己的驱动模块文件目录, 我自己用的是 ledtest 。然后将你写的驱动 ledtest.c拷贝到这个目录下,在这个目录下
vi Makefile 然后添加内容为
obj-$(CONFIG_LEDTEST) += ledtest.o
然后 vi Kconfig 添加内容为
menu MENU_LEDTEST
config LEDTEST
tristate "Ledtest"
---help---
This is ARM Ledtest driver file
endmenu
2)、返回上一级 drivers 目录修改目录下的Makefile 和 Kconfig
在 Makefile 的文件末尾加上:
obj-$(CONFIG_LEDTEST) += ledtest/(注意其名称的依赖关系)
在 Kconfig 的倒数第二行,也就是 endmenu 的前一行加上:
source "drivers/ledtest/Kconfig"(注意其名称的依赖关系)
做到这里我就开始 make menuconfig 了,但是 make 后的菜单Drivers下没有自己要的MENU_LEDTSET 目录选项。
而这里可能大多数的人已经得到了他们自己想看到的测试模块选项了,但有的用这种方法没有的预期结果。
如果你是那个没有得到结果的人,那么继续下一步:
3)、修改 arch/arm/Kconfig 文件 在 menu "Device Drives" 和 endmenu 之间加上
source “drivers/ledtest/Kconfig” 然后make menuconfig 后,在Device Drives 下就能出现MENU_LEDTEST选项
所以我就是那个没有得到结果的人,但是我最后找到问题之所以出的原因和解决办法,我还是觉得这个路绕的值。在这里的原理,我总结如下:
在前两步,得到预期结果的人,所使用的内核可能是新版内核,或已经打过补丁的内核。
要完成 低三步才能得到结果的人,所使用的内核可能是旧版内核,并且没有打过补丁,我开始用的内核就是。
在新版内核 arch/arm/Kconfig 的文件中 没有menu "Device Drives" ,,,,,,,,,,,,,,,,endmenu 这些文件。而仅仅是只用添加了source “drivers/Kconfig” 这一项。自己的理解是: 在新版内核arch/arm/Kconfig 没有完成对应驱动的加载任务,而是加他交给下层 drivers/Kconfig 来完成。 所以新版内核不需要进行第三步就能得到结构,而旧版不行。
分享到:
相关推荐
leddrv.c 编译方式 arm-elf-gcc -D__KERNEL__ -I你的uClinux目录/linux-2.4.x/include-Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fno-common -pipe -fno-builtin -D__linux__...
uboot、linux内核以及设备驱动的移植
/* define compiler specific symbols */ #if defined ( __CC_ARM ) #define __ASM __asm /*!*/ #define __INLINE __inline /*!*/ #elif defined ( __ICCARM__ ) #define __ASM __asm /*!*/
ARM版的OpenJDK11U-jdk_arm_linux_hotspot_11.0.8_10,适配国产系统(中标麒麟,银河麒麟)
arm-linux-gcc4.8工具链,是从NUC972开发包中提取的,放在这里用来备忘,方便查找。。
基于ARM_Linux的无线数据采集系统基于ARM_Linux的无线数据采集系统 毕业沦为
arm-linux 下小键盘驱动程序源码
snapdragon_sd_llvm_arm.lnx.3.8_installer_38400.1 snapdragon_sd_llvm_arm.lnx.3.8_installer_38400.1 snapdragon_sd_llvm_arm.lnx.3.8_installer_38400.1 snapdragon_sd_llvm_arm.lnx.3.8_installer_38400.1
一个LINUX驱动程序摸板,采用模块加载,可依此摸板编写自己的特定的驱动程序。
arm_linux内核启动过程分析arm_linux内核启动过程分析arm_linux内核启动过程分析arm_linux内核启动过程分析
ARM_LINUX平台下基于开源软件的车载导航终端的研究与设计
arm—linux线程程序,适用于arm-linux线程编程的学习。
ARM 基于 LINUX 的图象处理的代码
基于ARM _ Linux的网络化监控系统的设计.pdf
交叉编译工具:gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.bz2 解压命令:tar jxvf gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.bz2
s3c410 arm uart串口驱动程序
ARM_Linux_C语言开发入门
ARM_linux的嵌入式bootloader设计ARM_linux的嵌入式bootloader设计ARM_linux的嵌入式bootloader设计ARM_linux的嵌入式bootloader设计
用于ARM架构的centos系统的cfssl工具,适用M1芯片的苹果电脑虚拟机centos8系统。弥补cfssl官方没有给出arm64版本二进制文件,包含cfssl、cfssljson、cfssl-certinfo
GPRS_ARM_Linux视频采集代码!有需要的可以下载看看!