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