|
由于 spi 设备经常用到,而在 myd-am335x 的开发板上没有 spi 设备,所以内核里也没有 spi 设备的注册信息,对内核不熟悉的童鞋想要添加自己的 spi 设备时可能会感觉无从下手
折腾了一下下,在myd-am335x的 spi1 上添加了一个 spi 的设备,但由于 myd-am335x 上没有 spi 设备, 所以没有验证是否可行,但至少在 /dev/ 目录下有 spidev2.0 出来了,说明 spi 设备已经注册成功,接下来就是调试的事了
步骤如下
1. 首先想要用 spidev,就得把 spidev 加载到内核里,在Linux内核源码的根目录下运行:
[mw_shl_code=bash,true]make ARCH=arm menuconfig[/mw_shl_code]
依次选择
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)
[mw_shl_code=c,true]/* Module pin for SPI, JBO */
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},
};[/mw_shl_code]
3. 添加 spi 设备及注册函数
[mw_shl_code=c,true]/* Spi slave device, JBO */
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
},
};
/* Setup SPI, JBO */
static void spi_init(int evm_id, int profile)
{
/* Configure SPI */
setup_pin_mux(spi_pin_mux);
spi_register_board_info(am335x_spi1_slave_info,
ARRAY_SIZE(am335x_spi1_slave_info));
return;
}
[/mw_shl_code]
4. 在设备初始化列表里添加该函数的调用,和注释掉 McASP 函数,如下所示
[mw_shl_code=c,true]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},
};[/mw_shl_code]
5. 重新编译内核,并用该内核启动开发板后,就可以在 /dev/ 目录下看到 spidev2.0 设备结点了
|
-
|