针对beaglebone 扩展板,进行Linux驱动的调试

http://bbs.eeworld.com.cn/thread-413248-1-1.html

 

 

 

PS:主要是记录一下内核编译的过程

 

 

 

好久没有发帖子了!今天来分享一下针对beaglebone 扩展板,进行Linux驱动的调试吧!
第二次修正beaglebone板子的外围电路还是比较顺利的!

具体编译内核的过程就不在介绍了!论坛里有很多人写了这方面的教程,Ti官方的文档也提供了较为全面的编译过程,只不过是全英文的!


我主要针对LCD,触摸屏,Codec 音频等基本的设备的驱动进行了添加,是我的扩展板能够正常工作!

首先是LCD屏:

相信玩过beaglebone的朋友都知道,AM335x这款芯片对于LCD控制部分是有过勘误的:


就是16位和24位的更换需要交换B和R,单独使用是没有问题的,但是16位NANDFLASH的扩展会和LCD24位显示有冲突,本人把16位NANDFLASH的接口做出来了,焊接的时候就可以根据实际情况选择是16位还是8位,因此我设计了一组可以选择16位和24位的插针:


实际焊接的时候,我选择的方案是8位的NANDFLASH,因此跳线选择了24位LCD显示!
对应着要修改Linux内核的板级文件board-am335xevm.c

在Beaglebone的配置函数中加入LCD的初始化:
/* Beaglebone Rev A3 and after */
static struct evm_dev_cfg beaglebone_dev_cfg[] = {
        {tps65217_init,        DEV_ON_BASEBOARD, PROFILE_NONE},
        {i2c2_init,        DEV_ON_BASEBOARD, PROFILE_NONE},
        {mii1_init,        DEV_ON_BASEBOARD, PROFILE_NONE},
        {usb0_init,        DEV_ON_BASEBOARD, PROFILE_NONE},
        {usb1_init,        DEV_ON_BASEBOARD, PROFILE_NONE},
        {bbtoys7lcd_init,      DEV_ON_BASEBOARD, PROFILE_NONE},//24bit LCD 2013年7月30日
        {bone_tsc_init,        DEV_ON_BASEBOARD, PROFILE_ALL},//触摸 2013年8月1日
        //{boneleds_init, DEV_ON_BASEBOARD, PROFILE_ALL},//2013年7月30日       
        {mcasp0_init,        DEV_ON_BASEBOARD, PROFILE_NONE},//Codec 音频
        //{evm_nand_init, DEV_ON_BASEBOARD, PROFILE_NONE},
        {NULL, 0, 0},
};

具体的LCD初始化程序,可仿照文件里原来LCD的定义来编写,只不过定义成自己的名字,值得注意的是还要在内核中da8xx-fb.c文件,添加关于显示屏的偏移等因素设置。

修改完毕后,就是配置内核,编译内核,然后将内核放入内存卡中,启动查看效果!
编译内核过程简介:

生成 .config 文件:
make ARCH=armCROSS_COMPILE=arm-arago-linux-gnueabi- am335x_evm_defconfig

 


配置内核:
make ARCH=armCROSS_COMPILE=arm-arago-linux-gnueabi- menuconfig

 

 

 

开始编译内核,生成uImage:
make ARCH=armCROSS_COMPILE=arm-arago-linux-gnueabi- uImage
(时间稍长)

 

 

编译好uImage之后,到了生成模块ko:
make ARCH=armCROSS_COMPILE=arm-arago-linux-gnueabi- modules


或者缺省编译
make linux
生成的ko分散在不同的地方,可以用如下命令复制到文件系统相应的地方:
例如:make ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi-INSTALL_MOD_PATH=<path to root of file system> modules_install


要解压TI为我们制作好的文件系统到tf卡的rootfs分区:(此处要先格式化tf卡!因此先暂时在主文件夹下操作一次!)
找到文件系统目录:
root@anananjjj-desktop:/home/anananjjj/ti-sdk-am335x-evm-05.07.00.00/filesystem#


执行:
sudo tar -xzvf arago-base-tisdk-image-am335x-evm.tar.gz-C /home/anananjjj/rootfs/

 

 

 

make ARCH=armCROSS_COMPILE=arm-arago-linux-gnueabi- INSTALL_MOD_PATH=/home/anananjjj/rootfsmodules_install

 


也可以将模块安装在NFS目录下:
Make ARCH=arm CROSS_COMPILE=arm-arago-linux-gnueabi-INSTALL_MOD_PATH=/home/anananjjj/ti-sdk-am335x-evm-05.07.00.00/targetNFSmodules_install(这样可以为以后NFS调试开发板做准备!)
至此,需要的kerne已经编译完成,

我在启动阶段设置了加载Matrix v2 GUI界面!因此,系统启动之后会进入Matrix v2界面!

触摸屏:
之后就是触摸屏的移植,这款芯片支持4线,5线,8线触摸方式,我使用的是普通的4线电阻屏,选择好对应的四路AD引脚,设置好触摸参数就可以使用触摸屏了:

/* TSc controller */
#include <linux/lis3lv02d.h>

/* TSc controller */
static struct tsc_data am335x_touchscreen_data  = {
        .wires  = 4,
        .x_plate_resistance = 200,
        .mode = TI_TSCADC_TSCMODE,
};

static struct tsc_data bone_touchscreen_data  = {
        .mode = TI_TSCADC_GENMODE,
};

具体效果可以看下面的视频演示。

3、音频Codec

这个添加的比较彻底,因Ti其他Demo板都是使用的McASP1,而扩展的是McASP0,因此需要重新添加!好在有McASP1作为例子,添加起来倒是不难!

static struct snd_platform_data am335x_evm_snd_data0 = {
        .tx_dma_offset        = 0x46000000,        /* McASP0*/
        .rx_dma_offset        = 0x46000000,
        .op_mode        = DAVINCI_MCASP_IIS_MODE,
        .num_serializer        = ARRAY_SIZE(am335x_iis_serializer_direction0),
        .tdm_slots        = 2,
        .serial_dir        = am335x_iis_serializer_direction0,
        .asp_chan_q        = EVENTQ_2,
        .version        = MCASP_VERSION_3,
        .txnumevt        = 1,
        .rxnumevt        = 1,
};

static u8 am335x_iis_serializer_direction0[] = {
        INACTIVE_MODE,        INACTIVE_MODE,        RX_MODE,        TX_MODE,
        INACTIVE_MODE,        INACTIVE_MODE,        INACTIVE_MODE,        INACTIVE_MODE,
        INACTIVE_MODE,        INACTIVE_MODE,        INACTIVE_MODE,        INACTIVE_MODE,
        INACTIVE_MODE,        INACTIVE_MODE,        INACTIVE_MODE,        INACTIVE_MODE,
};

还要使能McASP0口的引脚!
/* Module pin mux for mcasp0 */
static struct pinmux_config mcasp0_pin_mux[] = {
        {"mcasp0_aclkx.mcasp0_aclkx", OMAP_MUX_MODE0 |AM33XX_PIN_INPUT_PULLDOWN},
        {"mcasp0_fsx.mcasp0_fsx", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN},
        {"mcasp0_ahclkr.mcasp0_axr2", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN},
        {"mcasp0_ahclkx.mcasp0_axr3", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN},
        {NULL, 0},
};

接着就是在配置函数中加入初始化函数!

重新编译内核之后,更新内核,上电就可以查看效果了!


本文来自EEWORLD电子工程世界,转载请注明出处: http://bbs.eeworld.com.cn/thread-413248-1-1.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章