針對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

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