打印

am335x 3.14内核移植过程

[复制链接]
6865|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
双盈科技|  楼主 | 2015-10-28 16:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

本文主要描述在EVB335X-IIDevice Tree的方式移植新TI官网AM335X系列最新的linux-3.14.43版本内核以及移植Debian文件系统的过程及遇到的一些问题。整个Device Tree牵涉面比较广,即增加了新的用于描述设备硬件信息的文本格式(即.dts文件),又增加了编译这一文本的工具,同时Bootloader也需要支持将编译后的Device Tree传递给Linux内核。以下是修改步骤:

一、修改uboot,支持Device Tree
EVB335X-IIlinux-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、内核配置和编译
先调入TIAM335X_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

相关帖子

沙发
双盈科技|  楼主 | 2015-10-28 16:42 | 只看该作者
2、dts文件的制作和编译
dts文件存放位置为arch/arm/boot/dts/目录。由于evb335x-ii的设计与evm335x接近,因此可以通过修改am335x-evm.dts文件来制作适合evb335x-ii的dts文件。具体修改请参考arch/arm/boot/dts/evb335x-ii-emmc.dts文件。
编译dts文件:
#make ARCH=arm CROSS_COMPILE=/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/bin/arm-linux-gnueabihf-evb335x-ii-emmc.dtb
编译完成后,在arch/arm/boot/dts/目录下生成evb335x-ii-emmc.dtb文件。
dts文件制作注意事项:
a、mpu电压选择,com335x核心板的mpu电压由tps65217的vdcdc2通道提供,因此,在dts文件/节点下,修改cpus节点为:
        cpus {
                cpu@0 {
                        cpu0-supply = <&dcdc2_reg>;        /* mpu supply 1.1V */
                };
        };
b、memory节点编写说明:
        memory {
                device_type = "memory";
                reg = <0x80000000 0x20000000>; /* 512 MB */
        };
其中,reg的第一个参数0x80000000为SDRAM起始地址,在uboot中定义:#define CONFIG_SYS_SDRAM_BASE 0x80000000(在uboot源码的include/configs/com335x.h文件中);reg的第二个参数为SDRAM大小(单位是bit),512M为0x20000000,若使用的SDRAM为256M,则该数值应为0x10000000。
c、关于引脚定义pinmux的编写说明
以user led引脚定义为例,在EVB335X-II中,用户灯使用gpio3_16脚,则其引脚定义为:
user_leds_s0: user_leds_s0 {
                pinctrl-single,pins = <
                        0x198 (PIN_OUTPUT | MUX_MODE7)        /* mcasp0_axr0.gpio3_16 */
                >;
        };
AM335x的IO口可以分配不同的外设功能,设置引脚的pinmux功能,在AM335x中被称为Control Module,它的起始地址为0x44E10000。
从0x44E10000开始偏移0x800的地址,是各种各样的conf寄存器,具体请参考AM335X的TRM.pdf章节9.3.1 CONTROL_MODULE Registers的Table 9-7. CONTROL_MODULE REGISTERS说明。
以上面的user_leds_s0为例,0x198表示地址为0x44E10998的conf寄存器,它的名称为conf_mcasp0_axr0,使用的是gpio功能,因此为MUX_MODE7(功能模式的选择请参考AM335X的datasheet);不需要上拉或者下拉电阻,因此设置为PIN_OUTPUT。PIN_OUTPUT定义在include/dt-bindings/pinctrl/am33xx.h中,如果要选择上拉,则为PIN_OUTPUT_PULLUP;如果要选择下拉,则为PIN_OUTPUT_PULLDOWN。
3、其它注意事项
1、看门狗芯片isl88013驱动移植
evb335x-ii使用了isl88013作为外部看门狗,但linux内核中没有该芯片的驱动支持,因此要手动将其驱动文件添加到内核源码中,驱动文件由本公司提供,光盘中的内核源码已包含(两个文件,分别是驱动文件drivers/watchdog/isl88013.c和头文件include/linux/wdt_isl88013.h),直接从里面复制出来即可。下是移植步骤:
a、将isl88013.c和wdt_isl88013.h分别复制到上述相应目录下;
b、打开drivers/watchdog/Kconfig文件,添加以下内容:
config ISL88013_WATCHDOG
        bool "ISL88013 watchdog"
        default n
        help
                ISL88013 watchdog which has one FEED pin.""
c、打开drivers/watchdog/Makefile文件,在末尾添加以下内容:
obj-$(CONFIG_ISL88013_WATCHDOG) += isl88013.o
d、在menuconfig中,去掉OMAP Watchdog(CPU内部看门狗)的支持,添加isl88013支持:
    Device Drivers  --->
            [*] Watchdog Timer Support  --->   
           [*]   ISL88013 watchdog      
           < >   OMAP Watchdog   
e、打开evb335x-ii-emmc.dts文件,在/节点下增加isl88013的相应信息:
        watchdog: watchdog {
                pinctrl-names = "default";
                pinctrl-0 = <&wdt_pins>;               
                compatible = "wdt,isl88013";
                gpios = <&gpio3 15 GPIO_ACTIVE_LOW>;
        };
在&am33xx_pinmux{}中增加isl88013的引脚定义:
        wdt_pins:wdt_pins {
                pinctrl-single,pins = <
                        0x194 (PIN_OUTPUT_PULLDOWN | MUX_MODE7)        /* mcasp0_fsx.gpio3_15 */
                >;               
        };
f、配置和dts文件修改完成后,重新编译内核和dts文件即可。
三、关于根文件系统
1、使buildroot制作的根文件系统
可以使用公司在evb335x上制作的根文件系统,但系统启动后出现一下问题:
[root@EVB335X user-led:red]# [   62.406535]  remoteproc0: failed to load am335x-pm-firmware.elf
[   62.412919]  remoteproc0: powering up wkup_m3
[   62.433013] wkup_m3 44d00000.wkup_m3: rproc_boot failed
该问题的具体原因和解决办法尚未找到,但不影响系统使用。另外,如果使用TI官方提供的开发套件下的根文件系统,则该问题不会出现。

2、移植Debian文件系统:
从网址下载debian-wheezy-7.5-rootfs-3.14.4.1-bone-armhf.com.tar.xz文件。下载完成后,用xz -d命令解压即可得到debian-wheezy-7.5-rootfs-3.14.4.1-bone-armhf.com.tar.文件,将该文件按照EMMC烧录说明烧写到EMMC即可。如果要使用BBB官网提供的Debian系统,请参考《COM335X 如何烧写BBB的Debian系统.doc》。

使用特权

评论回复
板凳
双盈科技|  楼主 | 2015-10-28 16:45 | 只看该作者
am335x工控开发板套件及at91sam9261评估板套件免费赠送开始啦!
bbs.ickey.cn/group-topic-id-56814.html

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:am335x应用专家 qq:259134942 artcor.taobao.com

10

主题

34

帖子

0

粉丝