tag 标签: devicetree

相关博文
  • 热度 13
    2020-10-15 10:43
    1984 次阅读|
    0 个评论
    By Toradex 胡珊逢 1). 简介 目前较新的 Linux 内核都支持 Device Tree 来管理外设,这对嵌入式设备来说显得尤为重要。通过单独的 Device Tree 文件,可以有效减少因外设更改而重新编译 Linux 内核的工作量。而随着 SoC 的复杂程度与日俱增, Device Tree 本身也开始变得复杂。 Device Tree Overlays ( DTO )则提供一种简洁的方式来更改 Device Tree 。下面我们将在 Apalis iMX8QM 计算机模块上介绍如何针对 Toradex Linux BSP v5.0 配置 Device Tree Overlays 。 本文就基于 NXP 最新的 iMX8 SoC (基于 Cortex-A72+A53 和 Coretex-M4 架构) ARM 平台介绍如何配置 Device Tree Overlays 。演示平台来自于 Toradex 基于 iMX8QM 的 Apalis iMX8QM ARM 嵌入式模块平台。 2). 测试流程 首先我们需要下载所需的编译工具和 Linux 内核源码,具体的方法参考我们开发者中心的 网页 ,如果想要在 Windows 上使用 WSL 进行编译,也可以阅读该 博文 。 使用 git 下载 Linux 内核源码 -------------------------- git clone -b toradex_5.4-2.1.x-imx git://git.toradex.cn/linux-toradex.git -------------------------- 我们还提供了适用于一些外设如 LVDS 显示屏、电容触摸屏控制器等现成 Device Tree Overlays 文件,这可以作为学习 Device Tree Overlays 的开始。 -------------------------- git clone -b toradex_5.4-2.1.x-imx git://git.toradex.cn/device-tree-overlays.git -------------------------- Device Tree Overlay 的使用分为三个步骤,编写 Device Tree Overlay 文件 dts ,将 dts 文件编译生成 dtbo 文件,部署 dtbo 文件。我们将用 Apalis iMX8QM 的一个 SD 接口为例,将 SD_DATA0 和 SD_DATA1 配置 GPIO 。 首先根据 Apalis iMX8QMdatasheet 确定使用的引脚, MXM3_186 和 MXM3_188 ,其对应的 GPIO 为 LSIO.GPIO5.IO26 和 LSIO.GPIO5.IO27 。 然后开始编译 test_overlay.dts 文件。 -------------------------- /dts-v1/; /plugin/; / { compatible = "toradex,apalis-imx8"; }; -------------------------- compatible 属性指定该 device tree overlay 文件适用的硬件,对应于 imx8qm-apalis-eval.dts 。 在默认配置中 MXM3_186 和 MXM3_188 用于 4-bit SD 通道,因此需要将该功能禁用。在 device tree 中,该 4-bit SD 通道对应的名字为 usdhc3 。 -------------------------- &usdhc3 { status = "disabled"; }; -------------------------- 在 iMX8QM 上 iomuxc 单元管理引脚复用的配置。 Apalis iMX8QM 默认配置中已经有 8 个 GPIO ,但是部分被用于其他设备如风扇电源控制等。我们这里增加两个新的 GPIO , pinctrl_gpio9 和 pinctrl_gpio10 。在 test_overlay.dts 增加,这里的 iomuxc/pinctrl-0 属性将会覆盖原来的配置。 -------------------------- -------------------------- 接下来需要把 MXM3_186 和 MXM3_188 配置为 GPIO 模式。在上面我们已经知道 MXM3_186 和 MXM3_188 对应的 GPIO 为 LSIO.GPIO5.IO26 和 LSIO.GPIO5.IO27 , Ball name 为 USDHC2_DATA0 和 USDHC2_DATA1 。根据这个写信息,在 pads-imx8qm.h 中找对引脚对应的表示名称, IMX8QM_USDHC2_DATA0_LSIO_GPIO5_IO26 和 IMX8QM_USDHC2_DATA1_LSIO_GPIO5_IO27 。在 test_overlay.dts 的 iomuxc 节点中添加 -------------------------- -------------------------- 至此, test_overlay.dts 文件已经完成,完整文件可以从 这里 下载。将 test_overlay.dts 复制到刚才下载的 device-tree-overlays/ overlays 目录下。 -------------------------- $ tree -L 2 . ├── device-tree-overlays │ └── overlays └── linux-toradex -------------------------- 然后执行下面两条命令生成 test_overlay.dtbo 文件。这里使用 -I 和 -i 参数指定 Linux 内核源码相关目录。 -------------------------- cpp -nostdinc -I ../../linux-toradex/arch/arm64/boot/dts/freescale -I ../../linux-toradex/include -undef -x assembler-with-cpp test_overlay.dts test_overlay.dts.preprocessed dtc -@ -Hepapr -I dts -O dtb -i ../../linux-toradex/arch/arm64/boot/dts/freescale/ -o test_overlay.dtbo test_overlay.dts.preprocessed -------------------------- 最后需要把 test_overlay.dtbo 部署到 Apalis iMX8QM 。将该文件复制到 /media/mmcblk0p1/overlays 目录中,然后修改 /media/mmcblk0p1/overlays.txt 文件。执行 reboot 命令重启系统。 -------------------------- fdt_overlays=overlays/test_overlay.dtbo -------------------------- 启动后可以在串口日志中发现 overlays/test_overlay.dtbo 被读取并应用到系统。 -------------------------- ## Executing script at 83100000 102464 bytes read in 19 ms (5.1 MiB/s) Loading hdp firmware from 0x000000009c000000 offset 0x0000000000002000 Loading hdp firmware Complete 162517 bytes read in 23 ms (6.7 MiB/s) 40 bytes read in 16 ms (2 KiB/s) Applying Overlay: overlays/test_overlay.dtbo 272 bytes read in 29 ms (8.8 KiB/s) 9805442 bytes read in 316 ms (29.6 MiB/s) Uncompressed size: 23144960 = 0x1612A00 ## Flattened Device Tree blob at 83000000 Booting using the fdt blob at 0x83000000 Loading Device Tree to 00000000fd603000, end 00000000fd64dfff ... OK -------------------------- 进入系统后可以对这两个引脚进行操作。在 Linux 系统中会使用对应的 GPIO 编号来访问引脚,对应的关系可以参考 这里 。 LSIO.GPIO05.IO26 ( MXM3_186 )和 LSIO.GPIO05.IO27 ( MXM3_188 )分别对应 346 和 347 。然后执行下面将其配置为输出模式。 -------------------------- /sys/class/gpio/export /sys/class/gpio/export /sys/class/gpio/gpio346/direction /sys/class/gpio/gpio347/direction root@apalis-imx8:~# cat /sys/kernel/debug/gpio gpio-346 (MXM3_186 |sysfs ) out lo gpio-347 (MXM3_188 |sysfs ) out lo -------------------------- 以下命令可以在对应引脚上设置高 / 低电平。 -------------------------- /sys/class/gpio/gpio346/value /sys/class/gpio/gpio347/value /sys/class/gpio/gpio346/value /sys/class/gpio/gpio347/value -------------------------- Device tree 是 Linux 内核的重要文件,如果配置不当有可能导致系统启动失败。一旦出现这种情况,可以将 Apalis iMX8QM 的 USB OTG 连接到电脑,然后在 U-boot 中执行下面命令后会将 Apalis iMX8QM 启动文件挂载到电脑,删除 overlays.txt 文件中配置的参数。保存后可以使用默认的 device tree 启动系统。 -------------------------- ums 0 mmc 0 -------------------------- 4). 总结 Device tree 可以使用户以较少配置更改来使用新的外设,避免编译整个 device tree 。 参考: https://developer.toradex.cn/device-tree-overlays-linux#Deploying_a_Device_Tree_Overlay https://developer.toradex.cn/knowledge-base/device-tree-overlays https://developer.toradex.cn/knowledge-base/build-u-boot-and-linux-kernel-from-source-code#Device_Tree_Overlays https://www.raspberrypi.org/documentation/configuration/device-tree.md
  • 热度 20
    2016-4-6 15:31
    1320 次阅读|
    0 个评论
    在嵌入式ARM平台设备上,经常有在一个SPI bus上面挂接一个或者多个SPI设备的需求,由于挂载一个设备的情况比较简单,本文主要就在嵌入式Linux环境下挂载多个SPI设备进行说明。   本文所采用的硬件为 Toradex  公司 Colibri VF61 计算机模块和开发载板,核心为Cortex-A5和M4异构双核,这里A5运行Toradex官方发布的 Embedded Linux  BSP V2.5,M4核心这里不做使用。   本文涉及Toradex发布Embedded Linux源码下载,Device Tree 定制编译,相关操作请参考下面文章,本文不做赘述。 http://developer.toradex.com/knowledge-base/build-u-boot-and-linux-kernel-from-source-code http://developer.toradex.com/device-tree-customization   Colibri VF61最多可以提供4路SPI bus,不过只有SPI1为系列兼容,因此这里就只使用SPI1,根据手册,其硬件管脚定义如下:   1). 在连接一个SPI 设备情况下,则只需要硬件对应连接上面管脚即可,Device Tree默认也已经设置好无需修改,然后按照下面文档说明操作即可 http://git.toradex.com/cgit/linux-toradex.git/tree/Documentation/spi/spidev_test.c?h=toradex_vf_4.1   2). 在连接多个SPI设备情况下,则主要问题是需要多个Chip Selection片选信号,这里有两种解决方案,一种是硬件CS管脚,VF61 SPI1通道除了默认的CS0,还提供额外的4个CS管脚,不过默认为其他功能;另外一种方式为直接使用GPIO作为CS管脚,下面对这两种方式分别说明: a).  采用硬件CS 管脚 除了默认的SPI1_CS0,VF61还提供了额外4个CS管脚SPI1_PCS1, SPI1_PCS2, SPI1_PCS3;不过由于不是默认功能,需要在Device Tree中修改,下面以除了默认的CS0,再添加一个设备采用SPI1_PCS1作为CS信号为例说明。 ./ 根据VF61手册,有连个管脚可以提供SPI1_PCS1功能,我们选择默认功能为GPIO的SODIMM Pin79来设置为SPI1_PCS1。 //修改iomuxc - vf610-colibri, 从’pinctrl_additionalgpio’里面删除对应GPIO管脚 pinctrl_additionalgpio: additionalgpios {                   fsl,pins = VF610_PAD_PTC4__GPIO_49              0x22ed …… ; }; //在’pinctrl_dspi1‘中添加对应的管脚 pinctrl_dspi1: dspi1grp {                         fsl,pins = VF610_PAD_PTD4__DSPI1_CS1                 0x33e2                         ; }; //最后再为新的slave device添加slave node dspi1 {         spidev1: dspi@0 {                 compatible = "spidev";                 reg = 0;                 spi-max-frequency = 50000000;         }; Spidev2: dspi@1 {                 compatible = "spidev";                 reg = 1;                 spi-max-frequency = 50000000;         }; };   b).  采用GPIO 作为CS 管脚 参考文档请见 这里 ,下面是一个简单举例 ./ 修改Device Tree SPI master node 参数     //增加cs-gpio 属性,定义GPIO CS管脚或者GPIO和硬件CS混合,如下面所示SPI1_PCS0和另外三个GPIO混合组成新定义的CS组合 dspi1 {         cs-gpios = 0 gpio1 14 0 gpio1 15 0 gpio1 16 0; }; 这样重新定义的CS片选组合为4个,顺序如下: CS0: SPI1_PCS0 CS1: gpio1 14 CS2: gpio1 15 CS3: gpio1 16 ./ 修改iomuxc - vf610-colibri,将所需的CS GPIO从GPIOs Pinctrl删除,并加入SPI1 Pinctrl。 //从’pinctrl_additionalgpio’里面删除上面三个GPIO管脚 pinctrl_additionalgpio: additionalgpios {          fsl,pins = VF610_PAD_PTC1__GPIO_46                 0x22ed VF610_PAD_PTC2__GPIO_47                 0x22ed VF610_PAD_PTC3__GPIO_48                 0x22ed …… ; };   //然后再添加到’pinctrl_dspi1‘ pinctrl_dspi1: dspi1grp {                         fsl,pins = VF610_PAD_PTC1__GPIO_46               0x33e2 VF610_PAD_PTC2__GPIO_47               0x33e2 VF610_PAD_PTC3__GPIO_48               0x33e2                         ; }; //最后再为每个slave device添加slave node dspi1 {         spidev1: dspi@0 {                 compatible = "spidev";                 reg = 0;                 spi-max-frequency = 50000000;         }; Spidev2: dspi@1 {                 compatible = "spidev";                 reg = 1;                 spi-max-frequency = 50000000;         }; …… };   3). 将上述修改好的Device Tree 文件重新编译后部署到VF61设备里面,就完成了多个SPI设备挂载,可以在应用中使用了。 a). 编译部署除了本文一开始提到的文章,也可以参考 这里 b). Embedded Linux 下 SPI设备调用请参考这里
  • 热度 19
    2016-1-28 14:37
    1857 次阅读|
    0 个评论
    1). 简介 设备树 (Device Tree)是一种用来描述系统硬件的数据结构,一些硬件设备设计机制就是可被系统发现的(如PCIExpress或者USB总线),而有 一些则不是(尤其是内存映射外设)。对于后一种情况,不同于X86架构系统采用BIOS和操作系统沟通硬件拓扑信息,ARMLinux通常情况是将硬件设 备描述硬编码到系统内核(LinuxKernel)中,但由于ARM嵌入式设备的多样和离散性,即便如此也不能保证覆盖到所有设备,而且长久以来给 ARMLinux内核代码维护造成了很大负担;基于这种情况,设备树的概念就被提出,将ARMSOC和板卡硬件平台描述信息从内核独立出来成为设备树文 件,通过bootloader传递给内核来识别当前平台设备并加载相应的资源和驱动,这样就把ARM嵌入式Linux内核统一起来,更好的利于内核维护, 而对于广泛的ARM嵌入式设备系统维护和迁移也更方便和有效率。 设备树机制从Linux 内核3.2 版本左右开始采用,其不仅可以定义ARMSoC内部内存映射外设,还可以定义整个板卡,下面就以 ToradexColibri VF61 计算机模块搭配 ColibriEva Board 为例来展示设备树的具体应用,另外关于设备树的更深入介绍,请参考 这里 。 2).设备树文件说明 Toradex ARM计算机模块工业产品级Embedded Linux源代码下载及编译指南请见 这里 ,其中设备树文件位于Kernel源代码 arch/arm/boot/dts/ 目录下。 产品系列 SoC Image版本 SoC级别 模块级别 EvaBoard级别 ColibriVF50 NXP/FreescaleVybrid V2.3Beta5onwards vf500.dtsi vf500-colibri.dtsi vf500-colibri-eval-v3.dts ColibriVF61 NXP/FreescaleVybrid V2.3Beta5onwards vf610.dtsi vf610-colibri.dtsi vf610-colibri-eval-v3.dts ColibriiMX6DL/S NXP/Freescalei.MX6 allcompatible imx6q.dtsi imx6qdl-colibri.dtsi imx6dl-colibri-eval-v3.dts ApalisiMX6Q/D NXP/Freescalei.MX6 V2.3Beta3onwards imx6q.dtsi imx6qdl-apalis.dtsi imx6q-apalis-eval.dts   设 备树通常由多级别的多个设备树文件构成,一个设备树文件(dts和dtsi)可以包含另外一个可包含设备树文件(dtsi),如一个板卡级设备树文件 (dts)一般会包含其所使用的SoC级别的设备树文件(dtsi)。如上图所示,为了支持Toradex产品,定义了三个级别的设备树文件:载板级别, 模块基本以及SoC级别,这些区别也体现在了设备树文件的命名上面。 载板级别的设备树文件(如vf610-colibri-eval- v3.dts)定义自Colibri EvaBoard载板,但基于Colibri模块的标准定义,同样也兼容于其他Colibri载板(如Iris载 板);不过如果用户针对自己应用定制了载板,则需要对应定制化设备树文件以便使能非默认定义功能设备(如第二个网口)或者关闭一些无用的设备。 设备树文件(dts)最后要被编译成设备树二进制文件(dtb)以供Linux内核启动加载所使用,所需的编译器也都集成在Linux源文件里面可以直接调用,从后面的示例可以看到具体的编译方法。 设 备树文件的基本单元是node,一个设备树文件只能有一个root node (/),其他node按照parent/childnode以树状结构分 布,每个node里面包含一些property/value来描述该node特性,如下面是一个UART设备的描述;另外低级别设备树文件的定义可以在更 高级别的设备树文件中重新定义或者更改,最后生成的二进制文件以最后一次定义为准,因此我们定制化设备树文件时候通常只定制修改最高级别的载板级设备树文 件即可;更详细的关于设备树文件语法的说明请见 这里 。 3).定制设备树文件 本文以Colibri VF61计算机模块和Eva board载板为例,定制设备树文件以使能GPIO和CANbus。Colibri Vybird系列产品设备树文件的架构如下图所示: a).创建新的载板级别设备树文件,这里为了方便直接复制vf610-colibri-eval-v3.dts ---------------------------------------------------------------------------------------- $ cp arch/arm/boot/dts/vf610-colibri-eval-v3.dtsarch/arm/boot/dts/vf610-colibri-my-carrier.dts ---------------------------------------------------------------------------------------- b).编辑设备树文件vf610-colibri-my-carrier.dts,将默认配置为PWM设备管脚配置为GPIO ---------------------------------------------------------------------------------------- $ vi vf610-colibri-my-carrier.dts ---------------------------------------------------------------------------------------- //添加下面内容于设备树文件中 c). 配置编译环境并编译新的设备树文件 ./ 安装交叉编译Tool Chain,请从 这里 下载 ---------------------------------------------------------------------------------------- $ tar xvfgcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz $ ln -s gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihfgcc-linaro ---------------------------------------------------------------------------------------- ./ 配置环境变量 ---------------------------------------------------------------------------------------- $ export ARCH=arm $ export PATH=~/gcc-linaro/bin/:$PATH $ export CROSS_COMPILE=arm-linux-gnueabihf- ---------------------------------------------------------------------------------------- ./ 修改arch/arm/boot/dts/Makefile文件, 插入"vf610-colibri-my-carrier.dtb" ---------------------------------------------------------------------------------------- dtb-$(CONFIG_SOC_VF610) += \ vf500-colibri-eval-v3.dtb \ vf610-colibri-eval-v3.dtb \ vf610-colibri-my-carrier.dtb \ vf500-colibri-dual-eth.dtb \ vf610-colibri-dual-eth.dtb \ vf610-cosmic.dtb \ vf610-twr.dtb ---------------------------------------------------------------------------------------- ./编译设备树文件,源代码根目录linux-toradex下,生成的文件可以在arch/arm/boot/dts/下找到 ---------------------------------------------------------------------------------------- $ make colibri_vf_defconfig $ make dtbs ---------------------------------------------------------------------------------------- 4).部署新的设备树文件并测试 a). 将新的设备树文件"vf610-colibri-my-carrier.dtb"放置到目标板ColibriVF61 Linux系统 /boot目录下 b). 如下修改目标板 uboot环境变量 ---------------------------------------------------------------------------------------- $ setenv fdt_board 'my-carrier' $ saveenv ---------------------------------------------------------------------------------------- c). 重启后则系统加载新的设备树文件 下面两个截图分别是更改前和更改后使用Toradex提供的GPIOConfig工具对PWM对应管脚进行查看,可以看到由原来的PWM属性变成了GPIO,修改成功后则可以按照 这里 的说明直接调用GPIO使用。 d). 对于CAN,ColibriVF61支持两个CAN接口,CAN0和CAN1,在设备树中使能CAN设备示例如下 ./ 编辑vf610-colibri-my-carrier.dts,添加下面内容 ./ 和上述方法一样重新编译设备树文件后部署,然后就可以在系统中调用CAN了,更详细的说明可以参考这里。  
  • 热度 21
    2016-1-28 14:37
    1384 次阅读|
    0 个评论
    1). 简介 设备树 (Device Tree)是一种用来描述系统硬件的数据结构,一些硬件设备设计机制就是可被系统发现的(如PCIExpress或者USB总线),而有 一些则不是(尤其是内存映射外设)。对于后一种情况,不同于X86架构系统采用BIOS和操作系统沟通硬件拓扑信息,ARMLinux通常情况是将硬件设 备描述硬编码到系统内核(LinuxKernel)中,但由于ARM嵌入式设备的多样和离散性,即便如此也不能保证覆盖到所有设备,而且长久以来给 ARMLinux内核代码维护造成了很大负担;基于这种情况,设备树的概念就被提出,将ARMSOC和板卡硬件平台描述信息从内核独立出来成为设备树文 件,通过bootloader传递给内核来识别当前平台设备并加载相应的资源和驱动,这样就把ARM嵌入式Linux内核统一起来,更好的利于内核维护, 而对于广泛的ARM嵌入式设备系统维护和迁移也更方便和有效率。 设备树机制从Linux 内核3.2 版本左右开始采用,其不仅可以定义ARMSoC内部内存映射外设,还可以定义整个板卡,下面就以 ToradexColibri VF61 计算机模块搭配 ColibriEva Board 为例来展示设备树的具体应用,另外关于设备树的更深入介绍,请参考 这里 。 2).设备树文件说明 Toradex ARM计算机模块工业产品级Embedded Linux源代码下载及编译指南请见 这里 ,其中设备树文件位于Kernel源代码 arch/arm/boot/dts/ 目录下。 产品系列 SoC Image版本 SoC级别 模块级别 EvaBoard级别 ColibriVF50 NXP/FreescaleVybrid V2.3Beta5onwards vf500.dtsi vf500-colibri.dtsi vf500-colibri-eval-v3.dts ColibriVF61 NXP/FreescaleVybrid V2.3Beta5onwards vf610.dtsi vf610-colibri.dtsi vf610-colibri-eval-v3.dts ColibriiMX6DL/S NXP/Freescalei.MX6 allcompatible imx6q.dtsi imx6qdl-colibri.dtsi imx6dl-colibri-eval-v3.dts ApalisiMX6Q/D NXP/Freescalei.MX6 V2.3Beta3onwards imx6q.dtsi imx6qdl-apalis.dtsi imx6q-apalis-eval.dts   设 备树通常由多级别的多个设备树文件构成,一个设备树文件(dts和dtsi)可以包含另外一个可包含设备树文件(dtsi),如一个板卡级设备树文件 (dts)一般会包含其所使用的SoC级别的设备树文件(dtsi)。如上图所示,为了支持Toradex产品,定义了三个级别的设备树文件:载板级别, 模块基本以及SoC级别,这些区别也体现在了设备树文件的命名上面。 载板级别的设备树文件(如vf610-colibri-eval- v3.dts)定义自Colibri EvaBoard载板,但基于Colibri模块的标准定义,同样也兼容于其他Colibri载板(如Iris载 板);不过如果用户针对自己应用定制了载板,则需要对应定制化设备树文件以便使能非默认定义功能设备(如第二个网口)或者关闭一些无用的设备。 设备树文件(dts)最后要被编译成设备树二进制文件(dtb)以供Linux内核启动加载所使用,所需的编译器也都集成在Linux源文件里面可以直接调用,从后面的示例可以看到具体的编译方法。 设 备树文件的基本单元是node,一个设备树文件只能有一个root node (/),其他node按照parent/childnode以树状结构分 布,每个node里面包含一些property/value来描述该node特性,如下面是一个UART设备的描述;另外低级别设备树文件的定义可以在更 高级别的设备树文件中重新定义或者更改,最后生成的二进制文件以最后一次定义为准,因此我们定制化设备树文件时候通常只定制修改最高级别的载板级设备树文 件即可;更详细的关于设备树文件语法的说明请见 这里 。 3).定制设备树文件 本文以Colibri VF61计算机模块和Eva board载板为例,定制设备树文件以使能GPIO和CANbus。Colibri Vybird系列产品设备树文件的架构如下图所示: a).创建新的载板级别设备树文件,这里为了方便直接复制vf610-colibri-eval-v3.dts ---------------------------------------------------------------------------------------- $ cp arch/arm/boot/dts/vf610-colibri-eval-v3.dtsarch/arm/boot/dts/vf610-colibri-my-carrier.dts ---------------------------------------------------------------------------------------- b).编辑设备树文件vf610-colibri-my-carrier.dts,将默认配置为PWM设备管脚配置为GPIO ---------------------------------------------------------------------------------------- $ vi vf610-colibri-my-carrier.dts ---------------------------------------------------------------------------------------- //添加下面内容于设备树文件中 c). 配置编译环境并编译新的设备树文件 ./ 安装交叉编译Tool Chain,请从 这里 下载 ---------------------------------------------------------------------------------------- $ tar xvfgcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz $ ln -s gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihfgcc-linaro ---------------------------------------------------------------------------------------- ./ 配置环境变量 ---------------------------------------------------------------------------------------- $ export ARCH=arm $ export PATH=~/gcc-linaro/bin/:$PATH $ export CROSS_COMPILE=arm-linux-gnueabihf- ---------------------------------------------------------------------------------------- ./ 修改arch/arm/boot/dts/Makefile文件, 插入"vf610-colibri-my-carrier.dtb" ---------------------------------------------------------------------------------------- dtb-$(CONFIG_SOC_VF610) += \ vf500-colibri-eval-v3.dtb \ vf610-colibri-eval-v3.dtb \ vf610-colibri-my-carrier.dtb \ vf500-colibri-dual-eth.dtb \ vf610-colibri-dual-eth.dtb \ vf610-cosmic.dtb \ vf610-twr.dtb ---------------------------------------------------------------------------------------- ./编译设备树文件,源代码根目录linux-toradex下,生成的文件可以在arch/arm/boot/dts/下找到 ---------------------------------------------------------------------------------------- $ make colibri_vf_defconfig $ make dtbs ---------------------------------------------------------------------------------------- 4).部署新的设备树文件并测试 a). 将新的设备树文件"vf610-colibri-my-carrier.dtb"放置到目标板ColibriVF61 Linux系统 /boot目录下 b). 如下修改目标板 uboot环境变量 ---------------------------------------------------------------------------------------- $ setenv fdt_board 'my-carrier' $ saveenv ---------------------------------------------------------------------------------------- c). 重启后则系统加载新的设备树文件 下面两个截图分别是更改前和更改后使用Toradex提供的GPIOConfig工具对PWM对应管脚进行查看,可以看到由原来的PWM属性变成了GPIO,修改成功后则可以按照 这里 的说明直接调用GPIO使用。 d). 对于CAN,ColibriVF61支持两个CAN接口,CAN0和CAN1,在设备树中使能CAN设备示例如下 ./ 编辑vf610-colibri-my-carrier.dts,添加下面内容 ./ 和上述方法一样重新编译设备树文件后部署,然后就可以在系统中调用CAN了,更详细的说明可以参考这里。