由于 spi 设备经常用到,而在 myd-am335x 的开发板上没有 spi 设备,所以内核里也没有 spi 设备的注册信息,对内核不熟悉的童鞋想要添加自己的 spi 设备时可能会感觉无从下手
折腾了一下下,在myd-am335x的 spi1 上添加了一个 spi 的设备,但由于 myd-am335x 上没有 spi 设备, 所以没有验证是否可行,但至少在 /dev/ 目录下有 spidev2.0 出来了,说明 spi 设备已经注册成功,接下来就是调试的事了
步骤如下

1. 首先想要用 spidev,就得把 spidev 加载到内核里,在Linux内核源码的根目录下运行:
make ARCH=arm menuconfig
依次选择
Device Drivers --->
SPI support --->
<*>McSPI driver for OMAP
<*>User mode SPI device driver support
注意:这些都要选上

2. 在 arch/arm/mach-omap2/board-am335xevm.c 文件里添加 spi1 的引脚配置
(注意 ,在myd-am335x上,spi1 的引脚跟 McASP 的引脚复用,所以用 spi1 就不能使用 McASP)
1
2
3
4
5
6
7
8
|
static
struct
pinmux_config spi_pin_mux[] = {
{ "mcasp0_aclkx.spi1_sclk" ,
OMAP_MUX_MODE3 | AM33XX_PULL_ENBL |AM33XX_INPUT_EN },
{ "mcasp0_fsx.spi1_d0" ,
OMAP_MUX_MODE3 | AM33XX_PULL_ENBL |AM33XX_PULL_UP | AM33XX_INPUT_EN},
{ "mcasp0_axr0.spi1_d1" ,
OMAP_MUX_MODE3 | AM33XX_PULL_ENBL |AM33XX_INPUT_EN},
{ "mcasp0_ahclkr.spi1_cs0" ,
OMAP_MUX_MODE3 | AM33XX_PULL_ENBL |AM33XX_PULL_UP | AM33XX_INPUT_EN},
{NULL,
0},
};
|
3. 添加 spi 设备及注册函数
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
static
struct
spi_board_info am335x_spi1_slave_info[] ={
{
.modalias =
"spidev" ,
// 用来匹配 spidev 驱动
.max_speed_hz
= 1000000, //
最大速率
.bus_num =
2,
// 表示该设备在 spi1 总线上
.chip_select
=0,
// 表示使用 spi1_cs0
},
};
static
void
spi_init( int
evm_id,
int
profile)
{
setup_pin_mux(spi_pin_mux);
spi_register_board_info(am335x_spi1_slave_info,
ARRAY_SIZE(am335x_spi1_slave_info));
return ;
}
|
4. 在设备初始化列表里添加该函数的调用,和注释掉 McASP 函数,如下所示
1
2
3
4
5
6
7
|
static
struct
evm_dev_cfg myd_am335x_dev_cfg[] = {
//
..............
//{mcasp0_init, DEV_ON_BASEBOARD,PROFILE_ALL},
{spi_init, DEV_ON_BASEBOARD,
PROFILE_ALL},
//
..............
{NULL,
0, 0},
};
|
5. 重新编译内核,并用该内核启动开发板后,就可以在 /dev/ 目录下看到 spidev2.0 设备结点了
|