linux驱动

为BeagleBone 添加SPI支持

时光总嘲笑我的痴心妄想 提交于 2020-04-10 22:33:56
Linux下的SPI驱动总的来说分成两大部分,一部分与SPI控制器相关,这种东西一般是不需要我们这种芯片使用者来编写的; 而另一部分与使用SPI总线接入的设备相关,这些东西就要我们自己动手了。时间有限,今天就先简单说说怎样为BeagleBone平台添加SPI支持。 首先,我是用的是BuildRoot搭建的整个开发环境,而BuildRoot中使用的TI提供的LinuxPSP(板级支持包啦)。像挂接在SPI总线上的东西,都可以算是Hard-wired的,是故在系统初始化的时候一并弄好,并且不再变动就显得很合理了……好吧,至少TI与写SPI驱动的认识这么认为的,所以这里我们如果想要添加新的SPI设备只能 修改内核代码 !其实不是很难…… 根据PSP文档,修改"board-am335xevm.c"文件。首先,当然要找到板子的初始化代码,恩,根据系统启动时的打印信息发现会调用"setup_beaglebone"函数,其中很重要的配置项就是beaglebone_dev_cfg 数组,其是类型为struct evm_dev_cfg 的数据结构,定义了一系列初始化函数。恩,好吧,我们就把SPI相关的部分加上。修改 beaglebone_dev_cfg为: /* Beaglebone Rev A3 and after */ static struct evm_dev_cfg beaglebone

linux设备驱动第四篇:以oops信息定位代码行为例谈驱动调试方法

China☆狼群 提交于 2019-12-10 05:43:38
上一篇我们大概聊了如何写一个简单的字符设备驱动,我们不是神,写代码肯定会出现问题,我们需要在编写代码的过程中不断调试。在普通的c应用程序中,我们经常使用printf来输出信息,或者使用gdb来调试程序,那么驱动程序如何调试呢?我们知道在调试程序时经常遇到的问题就是野指针或者数组越界带来的问题,在应用程序中运行这种程序就会报segmentation fault的错误,而由于驱动程序的特殊性,出现此类情况后往往会直接造成系统宕机,并会抛出oops信息。那么我们如何来分析oops信息呢,甚至根据oops信息来定位具体的出错的代码行呢?下面就根据一个简单的实例来说明如何调试驱动程序。 如何根据oops定位代码行 我们借用linux设备驱动第二篇:构造和运行模块里面的hello world程序来演示出错的情况,含有错误代码的hello world如下: #include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { char *p = NULL; memcpy(p, "test", 4); printk(KERN_ALERT "Hello, world\n"); return 0; } static void hello_exit