TI中文支持网
TI专业的中文技术问题搜集分享网站

Beaglebone运行Arago Linux后对外设的驱动开发问题

Beaglebone默认自带的MicroSD卡中装的的是Angstrom Distribution。我下载了TI官方的Linux SDK,重新编译了U-boot,kernel后烧录到microSD卡中,目前Beaglebone上电后能够使用putty进入到Arago的运行界面。我下面的工作是再Arago下开发一些外设的驱动,比如GPIO,CAN,SPI,LCD等,完全没有头绪该怎么样开始。以控制板载的LED为例,在Arago环境下,我怎样开发一个驱动,能闪烁beaglebone的四个板载LED呢?有没有一些好的资料或者开发指南可以共享?谢谢。

Yaoming Qin:

建议您直接使用 ezsdk

培训资料可以参考 http://processors.wiki.ti.com/index.php/Sitara_Linux_Training

Jiang Panfeng:

回复 Yaoming Qin:

Yaoming,您好!

谢谢你的回复。我这几天看了一下你发的链接中的Linux training资料,但是大部分内容是讲直接下载并编译TI的kernel、uboot或者其他应用的源码,重新编译。kernel、uboot我已经能编译而且烧到uSD卡中启动beaglebone了。我的问题在于如何修改内核或者添加驱动以支持我自己的应用。比如以驱动GPIO为例,网上下载的ezsdk编译后运行在beaglebone上时其4个user led是不亮的。我的第一个应用是利用beaglebone的4个user led做一个跑马灯程序。有几个问题请教你:

1. TI Linux EZSDK 和 PSP的关系和区别是什么?在编译内核时根据

http://processors.wiki.ti.com/index.php/AMSDK_Linux_User%27s_Guide

链接中的内容,其配置文件对于SDK使用tisdk_am335x-evm_defconfig,而对于PSP使用am335x_evm_defconfig

$make CROSS_COMPILE=arm-arago-linux-gnueabi- ARCH=arm tisdk_am335x-evm_defconfig

 

2. 我在arch/arm/arch-omap2/board-am335xevm.c 文件中增加了如下内容(想点亮beaglebone上的LED0和LED1):

static struct gpio_led jpf_gpio_leds[] = { {  .name   = "jpf::usr0",  .default_trigger = "heartbeat",  .gpio   = GPIO_TO_PIN(1, 21), /* LED0 */ }, {  .name   = "jpf::usr1",  .default_trigger = "mmc0",  .gpio   = GPIO_TO_PIN(1, 22), /* LED1 */ },};

static struct gpio_led_platform_data jpf_gpio_led_info = { .leds  = jpf_gpio_leds, .num_leds = ARRAY_SIZE(jpf_gpio_leds),};

static struct platform_device jpf_leds_gpio = { .name = "jpf-leds-gpio", .id = -1, .dev = {  .platform_data = &jpf_gpio_led_info, },};

static struct platform_device *jpf_bone_devices[] __initdata = {      &jpf_leds_gpio,};

//my GPIO pin muxstatic struct pinmux_config jpf_gpio_led_mux[] = { /* User LED gpios (gpio1_21 to gpio1_24) */     {"gpmc_a5.gpio1_21", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},     {"gpmc_a6.gpio1_22", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, {NULL, 0},};//

static void jpf_gpio_led_init(int evm_id, int profile){ int err;

 setup_pin_mux(jpf_gpio_led_mux); //err = platform_device_register(&jpf_leds_gpio); err = platform_add_devices(jpf_bone_devices, ARRAY_SIZE(jpf_bone_devices)); if (err)  pr_err("failed to register JPF gpio led device\n");}

同时,在beaglebone_dev_cfg中添加了初始化的函数

static struct evm_dev_cfg beaglebone_dev_cfg[] = {……………………………………………….

 {jpf_gpio_led_init, DEV_ON_BASEBOARD, PROFILE_NONE}, 

 ………………………………………………

};

重新编译内核后在/sys/devices/platform下面倒是出现了一个新设备jpf-leds-gpio。但是怎么用它控制LED呢?

有没有一个step by step的文档来说明怎么添加一个全新的驱动呢?比如怎么修改arch/arm/arch-omap2/board-am335xevm.c文件?是否还需修改其他的文件呢?

不好意思,我刚刚学习嵌入式linux开发,所以问的问题可能不是很合适。

谢谢你的支持。

Yaoming Qin:

回复 Jiang Panfeng:

TI不提供step by step开发驱动的文档,因为:

1. TI的驱动都是按照标准的Linux驱动的编写的。

2. TI不是Linux开发公司

所以您可以通过google查找Linux驱动的各种资料,实际上也非常多,关于寄存器的配置,或者TI驱动特别配置的地方,可以参考我们的wiki

Jiang Panfeng:

回复 Yaoming Qin:

好的,谢谢回复。

能否把上面第一个问题回答一下?

1. TI Linux EZSDK 和 PSP的关系和区别是什么?在编译内核时根据

http://processors.wiki.ti.com/index.php/AMSDK_Linux_User%27s_Guide

中的内容,其配置文件对于SDK使用tisdk_am335x-evm_defconfig,而对于PSP使用am335x_evm_defconfig

tisdk_am335x-evm_defconfig和am335x_evm_defconfig的区别在哪里?为什么会有这种区别?谢谢!

Jiang Panfeng:

回复 Yaoming Qin:

知道了,谢谢

赞(0)
未经允许不得转载:TI中文支持网 » Beaglebone运行Arago Linux后对外设的驱动开发问题
分享到: 更多 (0)