mini2440 SPI驱动移植
来源:互联网 发布:java.long.ill 编辑:程序博客网 时间:2024/05/22 03:27
最近项目需要,需要在mini2440上移植SPI驱动,板子需要驱动SPI设备,上网找了很多资源,但是很多都是有问题,最终在基本理解驱动结构的前提下,将SPI驱动顺利移植到mini2440。
,我使用的内核版本是2.6.32.2,这个版本和2.6。29不一样,网上很多版本都是关于2.6.29,如果完全按照网上步骤,编译会出现问题,我做的步骤如下:
1,在Linux Source Code中修改arch/arm/mach-s3c2440/mach-mini2440.c文件,加入头文件:
#include <linux/spi/spi.h>#include <../mach-s3c2410/include/mach/spi.h>然后加入如下代码:
static struct spi_board_info s3c2410_spi0_board[] ={ [0] = { .modalias = "spidev", .bus_num = 0, .chip_select = 0, .irq = IRQ_EINT9, .max_speed_hz = 500 * 1000, }};static struct s3c2410_spi_info s3c2410_spi0_platdata = { .pin_cs = S3C2410_GPG(2), .num_cs = 1, .bus_num = 0, .gpio_setup = s3c24xx_spi_gpiocfg_bus0_gpe11_12_13,};static struct spi_board_info s3c2410_spi1_board[] ={ [0] = { .modalias = "spidev", .bus_num = 1, .chip_select = 0, .irq = IRQ_EINT2, .max_speed_hz = 500 * 1000, }};static struct s3c2410_spi_info s3c2410_spi1_platdata = { .pin_cs = S3C2410_GPG(3), .num_cs = 1, .bus_num = 1, .gpio_setup = s3c24xx_spi_gpiocfg_bus1_gpg5_6_7,};这里需要了解驱动架构,其中移植过程中容易出问题的地方时S3C2410_GPG(2)和S3C2410_GPG(3)两处地方,网上一般给的源代码是S3C2410_GPG2,这在2.6.29中可行,但是在2.6.32源代码中没有定义S3C2410_GPG2宏定义,要使用S3C2410_GPG(2)宏定义。
在mini2440_devices[]平台数组中添加如下代码:
&s3c_device_spi0,&s3c_device_spi1,最后在mini2440_machine_init函数中加入如下代码:
s3c_device_spi0.dev.platform_data= &s3c2410_spi0_platdata;spi_register_board_info(s3c2410_spi0_board, ARRAY_SIZE(s3c2410_spi0_board));s3c_device_spi1.dev.platform_data= &s3c2410_spi1_platdata;spi_register_board_info(s3c2410_spi1_board, ARRAY_SIZE(s3c2410_spi1_board));
最后需要修改arch/arm/plat-s3c24xx/KConfig文件
找到如下代码段:
config S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13 bool help SPI GPIO configuration code for BUS0 when connected to GPE11, GPE12 and GPE13.config S3C24XX_SPI_BUS1_GPG5_GPG6_GPG7 bool help SPI GPIO configuration code for BUS 1 when connected to GPG5, GPG6 and GPG7.
修改为
config S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13 bool "S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13" help SPI GPIO configuration code for BUS0 when connected to GPE11, GPE12 and GPE13.config S3C24XX_SPI_BUS1_GPG5_GPG6_GPG7 bool "S3C24XX_SPI_BUS1_GPG5_GPG6_GPG7" help SPI GPIO configuration code for BUS 1 when connected to GPG5, GPG6 and GPG7.最后我们配置编译文件:
make menuconfig图1
图2
图3
图4
图5
最后编译内核
make zImage将编译好的内核导入开发板,并且编译Linux Source自带的测试程序,在Documentation/spi下,修改spidev_test.c文件,将device name改为/dev/spidev1.0
交叉编译:
arm-linux-gcc -I ~/linux-2.6.32.2/include/ spidev_test.c将编译好的文件下载到开发板上,并且将开发板的SPI MOI和MIO短接,也就是让SPI自己发送自己接收,执行文件,我们看到如下结果:
FF FF FF FF FF FF40 00 00 00 00 95FF FF FF FF FF FFFF FF FF FF FF FFFF FF FF FF FF FFDE AD BE EF BA ADF0 0D说明驱动移植成功。
总结:这里叙述的是驱动移植详细过程,代码的具体含义以及开发板的针脚对应图需要自己去查阅相关资料,这里不再详述。
- mini2440 SPI驱动移植
- mini2440 SPI驱动移植
- mini2440 SPI驱动移植
- mini2440 SPI驱动移植
- mini2440 SPI驱动移植
- 【转载】mini2440 SPI驱动移植
- mini2440移植之SPI驱动
- mini2440 SPI驱动移植(转)
- mini2440 SPI驱动移植 (基于SPI子系统)
- Linux2.6.32下SPI驱动的移植(mini2440)
- mini2440 spi驱动总结
- RC522 SPI驱动 mini2440
- Linux中SPI子系统图解和mini2440下的SPI驱动移植
- Linux中SPI子系统图解和mini2440下的SPI驱动移植
- Linux中SPI子系统图解和mini2440下的SPI驱动移植
- mini2440触摸屏驱动移植
- mini2440 蓝牙驱动移植
- mini2440 nandflash驱动移植
- MVP, MVC, MVVM, 傻傻分不清楚~
- Android开发指南-用户界面-菜单特性
- Android的Intent和IntentFilter应用说明一例
- DPInst.exe
- Request.ServerVariables大全
- mini2440 SPI驱动移植
- Spring通过构造函数注入值和对象
- 联想平板电脑定价内外有别 B2B定位或为主因
- 数据挖掘的基本问题与基本方法
- Classes获取文件小结
- 在C编程中使用到的几个重要关键字之一extern
- Visual Studio扩展——在Solution Exporer树的子项的右键菜单中新增命令
- 获取iOS设备当前ip地址
- 有关javascript回车键的事件处理问题(搜索、提交等行为)