spi驱动(基于linux3.4.2)
来源:互联网 发布:宁波seo教程 编辑:程序博客网 时间:2024/05/23 05:08
一、 说明:
a) 内核版本号:3.4.2
b) 没有说自己创建的,内核里面有
c) 基于韦东山spi视频,加自己整合
二、 第一个文件:(描述开发板的文件)构造注册spi_board_info
在内核路径下: drivers/spi/spi_info_jz2440.c(这个文件是自己创建的)
1、 module_init(spi_info_jz2440_init);
2、 MODULE_LICENSE(“GPL”);
3、 spi_info_jz2440_init()调用 spi_register_board_info(spi_info_jz2440,ARRAY_SIZE(spi_info_jz2440)) //这个函数向系统注册
4、 在spi_board_info spi_info_jz2440[] {}这个结构体中对开发板的相关信息进行说明
三、 第二个文件(spi_master)
1、 driver/spi/spi_s3c24xx.c 它注册了名为“s3c2410-spi”的platform_driver
2、 需要有同名的platform_device
a) (在arch/arm/mach-s3c24xx/mach-smdk2440.c文件中154(搜索,platform_device &s3c_device_usb))
b) 如果使用mini2440的内核,要在arch/arm/mach-s3c24xx/mach-mini2440.c中 514行(搜索platform_device,下面添加&s3c_device_spi0,&s3c_device_spi1,(这是自己之前定义的))修改arch/arm/mach-s3c24xx/mach-smdk2440.c
smdk2440 devices[] = {};
c) 在(arch/arm/plat-samsung/devs.c)475和506
Devices/spi/spi.c中 spi_add_device
d) 给platform_dev添加platform_date
e) 配置内核使用主控驱动 spi-s3c24xx.c 配置文件(driver/spi/Makefile 25行)make uImage, insmod
四、 具体函数调用流程分析
在arch/arm/plat-samsung/devs.c中添加s3c2410_spi_info结构的两个成员spi1_info 和spi0_info,里面包括.bus_num为1和0,这是下面匹配要用到的
在 platform_device 结构体中 .dev = {
.conherent_dma_mask =
//添加
.platform_data = &spi0_info
}
加入后,下面等待调用就可以了
||
\/
arch/arm/mach-s3c24xx/mach-smdk2440.c
在platform_device *smdk2440_devices[] 添加的 &spi_device_spi0和 &spi_device_spi1 这个结构体在
Smdk2440_machine_init中调用platform_add_devices放入系统中
||
\/
在drivers/spi/spi-s3c24xx.c中注册s3c2410_spi_driver
在这里进行spi_master相关操作,这里需要一个platform_device结构体将spi_master需要的相关信息传过来,将bus_num放在系统中,用于下面的比较
||
\/
Spi_register_board_info(); (drivers/spi/spi_info/spi_info_jz2440.c)
自己写的函数
||
\/
Spi_register_board_info();(drivers/spi/spi.c)
为一个制定的板子(平台)注册一个SPI_devices
||
\/
调用函数
List_add_tail(); list_for_each_entry(); (include/linux/list.h)
Spi_match_master_to_boardinfo(); //drivers/spi/spi.c
||
\/
在Spi_match_master_to_boardinfo();函数中
Master->bus_num 与 bi->bus_num进行比较,查看系统中是否有相应的spi总线,如果有
调用spi_new_device创建新的设备节点
五、 spi_nrf24l01_drv.c按照裸板的程序模拟I/O口操作就可以了,实际上,没有使用spi_master(即系统自带的spi控制器)
(暂时不懂怎么不能使用)
使用ioremap和readb,writeb操作
六、 部分文件截屏
1、 arch/arm/plat-samsung/devs.c
2、 arch/arm/mach-s3c24xx/mach-smdk2440.c
3、 drivers/spi/spi-s3c24xx.c
4、 drivers/spi/spi_info/spi_info_jz2440.c自己写的函数
- spi驱动(基于linux3.4.2)
- AM335X 串口驱动学习(1)-基于linux3.8内核
- AM335X 串口驱动学习(2)-基于linux3.8内核
- SPI在linux3.14.78 FS_S5PC100(Cortex A8)和S3C2440上驱动移植(deep dive)
- SPI在linux3.14.78 FS_S5PC100(Cortex A8)和S3C2440上驱动移植(deep dive)_0
- DMA设备驱动(三)————基于Linux3.4.2的dma设备驱动的简单实现
- mini2440 SPI驱动移植 (基于SPI子系统)
- Linux3.6.9下AD7490的SPI通信驱动设计
- linux3.2下adt7320的spi驱动编写
- 编写i2c驱动-基于Linux3.10
- 编写i2c驱动-基于Linux3.10
- I.mx6s上移植wm8960驱动(基于linux3.0.101版本)
- Android 基于sx8652的触摸屏驱动(gpio模拟spi)
- 基于Linux3.0.8+smart210的DS18B20驱动移植
- 基于NanoPi2的Linux3.4内核GPIO驱动
- Linux3.2 源码驱动分布(TI)
- 05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
- 基于linux2.6.33 spi驱动移植总结
- 数组复习
- 我所理解的设计模式(C++实现)——访问者模式(Visitor Pattern)
- 桌面快捷方式上面出现了蓝色的?号
- Android虚拟机学习总结Dalvik虚拟机进程和线程的创建过程分析
- oc 编译
- spi驱动(基于linux3.4.2)
- Android之Git安装与配置
- ARQ与滑动窗口协议
- [Practical.Vim(2012.9)].Drew.Neil.Tip20学习摘要
- 欧冠落幕
- “,”附近有语法错误,dbutils关键字错误
- android中如何解析没有Key的Json数据
- 《设计模式》第三章——Builder模式
- 将本地git仓库推送到github上