本文主要描述在EVB335X-II以Device Tree的方式移植新TI官网AM335X系列最新的linux-3.14.43版本内核以及移植Debian文件系统的过程及遇到的一些问题。整个Device Tree牵涉面比较广,即增加了新的用于描述设备硬件信息的文本格式(即.dts文件),又增加了编译这一文本的工具,同时Bootloader也需要支持将编译后的Device Tree传递给Linux内核。以下是修改步骤:
一、修改uboot,支持Device Tree
EVB335X-II在linux-3.2版本内核移植的时候已经有uboot,因此只需在该uboot上增加Device Tree支持即可,以下是修改步骤:
1、修改include/configs/com335x.h文件,增加支持DT的宏定义:
/*Flattened Device Tree */
#defineCONFIG_OF_LIBFDT
2、修改uboot启动参数,增加dtb文件的加载和启动(由于目前只是移植EMMC版本的EVB335X-II,因此只需修改EMMC的启动参数即可,大概在405行),修改如下:
#elifdefined(CONFIG_EMMC_BOOT)
#defineCONFIG_BOOTCOMMAND \
"run mmcboot;"
#defineCONFIG_EXTRA_ENV_SETTINGS \
"lcdtype=AUO_AT070TN94\0" \
"console=ttyO0,115200n8\0" \
"mmcroot=/dev/mmcblk0p2 rw\0" \
"mmcrootfstype=ext4 rootwait\0"\
"mmcargs=setenv bootargs console=${console}noinitrd root=${mmcroot} rootfstype=${mmcrootfstype} lcdtype=${lcdtype}consoleblank=0\0" \
"mmcdev=" MMCDEV "\0"\
"loadaddr=0x81000000\0" \
"dtbfile=evb335x-ii-emmc.dtb\0" \
"bootenv=uEnv.txt\0" \
"bootpart=" BOOTPART"\0" \
"loadbootenv=load mmc ${mmcdev}${loadaddr} ${bootenv}\0" \
"importbootenv=echo Importingenvironment from mmc ...; " \
"envimport -t $loadaddr ${filesize}\0" \
"loadaddr-dtb=0x82000000\0" \
"loadimage=load mmc ${bootpart}${loadaddr} uImage\0" \
"loaddtb=load mmc ${bootpart}${loadaddr-dtb} ${dtbfile}\0" \
"mmcboot=mmc dev ${mmcdev}; " \
"ifmmc rescan; then " \
"echo SD/MMC found on device${mmcdev};" \
"if run loadbootenv; then " \
"echoLoaded environment from ${bootenv};" \
"runimportbootenv;" \
"fi;" \
"run mmcargs;" \
"if run loadimage; then " \
"runloaddtb;" \
"bootm${loadaddr} - ${loadaddr-dtb};" \
"fi;" \
"fi;\0"
#endif
以上,红色为修改部分。修改完成后,重新编译即可。
二、移植内核
下载内核源码,进入TI官网:
下载am335x-evm-sdk-src-01.00.00.03.tar.gz文件,解压该文件后,在当前目录下生成board-support目录,进入内核源码目录board-support/linux-3.14.43+gitAUTOINC+875c69b2c3-g875c69b,进行以下步骤:
1、内核配置和编译
先调入TI给AM335X_EVM提供的config文件tisdk_am335x-evm_defconfig(该配置文件与COM335X核心板最合适,也可使用omap2plus_defconfig,但需改动的配置较多),这样很多配置就可以使用它的,然后在此基础上增加或裁减配置。
#make ARCH=armCROSS_COMPILE=/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/bin/arm-linux-gnueabihf-tisdk_am335x-evm_defconfig
进入menuconfig,进行配置修改:
#makeARCH=arm menuconfig
内核配置注意事项:
a、首先要修改的是串口,tisdk_am335x-evm_defconfig里的console串口(即调试串口)为8250的扩展串口,但EVB335X-II没有该扩展串口,因此需要取消该项配置,其console串口为CPU自带串口,配置选项为OMAP serial port:
Device Drivers --->
Character devices --->
Serial drivers --->
< >8250/16550 and compatible serial support
.........
<*> OMAPserial port support
Console on OMAP serial port
如果不做修改,系统启动后会出现can't open /dev/ttyO0: No such file or directory的提示,无法使用调试串口。
b、修改USB配置,原配置里的USB不能使用,修改配置如下:
Device Drivers --->
USB support --->
OTG support
.............
<*> Inventra Highspeed Dual Role Controller (TI,ADI, ...)
MUSB Mode Selection(Dual Role mode) --->
<*> Platform Glue Layer (TI DSPSplatforms) --->
MUSB DMA mode(TI CPPI 4.1 (AM335x)) --->
需要注意的是,Platform Glue Layer必须选为TI DSPS platforms,否则USB无法使用。
c、修改声卡配置,原配置为模块,现将其配置进内核:
Device Drivers --->
<*> Sound card support --->
<*> Advanced Linux Sound Architecture --->
<*> ALSA for SoC audio support --->
<*> SoC Audio for Texas Instruments chips usingeDMA (AM33XX/43XX)
-*- Multichannel Audio Serial Port (McASP)support
<*> SoC Audio for the AM33XX chip based boards
-*- SoC Audio for the Texas Instruments OMAPchips
CODEC drivers --->
-*-Texas Instruments TLV320AIC31xx CODECs
-*-Texas Instruments TLV320AIC3x CODECs
其它功能的具体配置这里不一一表述,具体参考evb335x-ii-demo_config。
编译内核:
#make ARCH=armCROSS_COMPILE=/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/bin/arm-linux-gnueabihf- LOADADDR=0x80008000 uImage
注意:加上LOADADDR参数,否则会出以下错误:
multiple(or no) load addresses:
Thisis incompatible with uImages
|