本次源碼適配項目是在NXP i.MX6ULL EVK評估板所搭載的Linux內核源碼(版本為Linux-imx_4.1.15)基礎上進行的,主要目標是通過調整功能接口引腳配置,使其適應ELF 1開發板。為了深入闡述這一適配過程,我們將以PWM功能的適配作為具體示例,深入解析整個流程。
1、準備工作
NXP源碼路徑:ELF1開發板資料包\07-NXP 原廠資料\07-1 NXP官方源碼\linux-imx-imx_4.1.15_2.0.0_ga.tar.bz2
(1)將NXP源碼拷貝到開發環境home/root/work目錄下解壓
elf@ubuntu:~/work$ tar jvxf linux-imx-imx_4.1.15_2.0.0_ga.tar.bz2 elf@ubuntu:~/work$ cd linux-imx-imx_4.1.15_2.0.0_ga/ elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ ls
(2)添加默認配置文件
將arch/arm/configs路徑下的imx_v7_mfg_defconfig復制一份,命名為imx6ull_elf1_defconfig
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ cp arch/arm/configs/imx_v7_mfg_defconfig arch/arm/configs/imx6ull_elf1_defconfig
(3)添加ELF 1設備樹
將arch/arm/boot/dts路徑下的imx6ull-14x14-evk.dts復制一份,命名為imx6ull-elf1-emmc.dts
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ cp arch/arm/boot/dts/imx6ull-14x14-evk.dts arch/arm/boot/dts/imx6ull-elf1-emmc.dts
打開arch/arm/boot/dts/Makefile,找到CONFIG_SOC_IMX6ULL,將imx6ull-elf1-emmc.dts添加到Makefile中。
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vi arch/arm/boot/dts/Makefile
(4)建立交叉編譯腳本
建立一個編譯腳本build.sh
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vim build.sh
添加以下內容,保存退出
#!/bin/bash export CPUS=`grep -c processor /proc/cpuinfo` source /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi make distclean make imx6ull_elf1_defconfig make -j${CPUS} rm -rf ./.tmp make modules_install INSTALL_MOD_PATH=./.tmp/rootfs/ cd .tmp/rootfs/ tar -jcvf modules.tar.bz2 *
給予腳本權限
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ chmod 777 build.sh
2、適配PWM
(1)硬件原理
開發板上控制蜂鳴器的引腳網絡名為PWM2,通過引腳網絡名可確定到其球號為M15,再通過球號確定到引腳名稱PAD NAME為GPIO1_IO09。
(2)IOMUX配置
從上圖可以看出PWM2連接到了連接器的65腳。接下來我們需要找到這個引腳在軟件上的信號名稱。
打開ELF 1開發板資料包\05-硬件資料\05-4 管腳分配表\ELF 1引腳復用對照表找到65引腳的信號名稱。
可以看到連接器的65引腳信號名稱為GPIO1_IO09。
因為需要使用PWM控制蜂鳴器,所以需要把它復用成PWM功能,在arch/arm/boot/dts/imx6ul-pinfunc.h中找到它們的宏定義,如下:
打開設備樹文件arch/arm/boot/dts/imx6ull-elf1-emmc.dts,在&iomux節點下添加子節點pinctrl_pwm2:
pinctrl_pwm2: pwm2grp { fsl,pins = < MX6UL_PAD_GPIO1_IO09__PWM2_OUT 0x110b0 >; };
效果如下:
配置完PWM2之后,檢查設備樹中是否把GPIO1_IO09復用成其它功能了。在arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件中搜索引腳PAD NAME“GPIO1_IO09”,在&iomux的子節點pinctrl_hog_1節點下搜索到了GPIO1_IO09的另一個功能復用配置,將該引腳復用成了GPIO功能,用于TF卡的復位,ELF 1開發板沒有使用此功能,可以將其注釋掉。
此外,還需要注釋掉節點下的如下內容
(3)設備節點配置
在設備樹文件arch/arm/boot/dts/imx6ull.dtsi中已經定義好了8路PWM信號的相關節點,只需要將PWM2的時鐘配置上即可,將clocks屬性的IMX6UL_CLK_DUMMY更改為IMX6UL_CLK_PWM2。
打開arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件,已經存在PWM1相關節點,PWM1是輸出給LCD的背光使用的。在&pwm1節點下添加節點&pwm2。
&pwm2 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_pwm2>; status = "okay"; };
效果如下:
(4)編譯
由于pwm只涉及到設備樹修改,不再使用腳本編譯,單獨編譯設備樹即可。
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ make dtbs
將編譯生成的imx6ull-elf-emmc.dtb拷貝到ELF 1開發板的/run/media/mmcblk1p1 路徑下。
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/dts/imx6ull-elf1-emmc.dtb root@172.16.0.175:/run/media/mmcblk1p1/
保存并重啟開發板
root@ELF1~# sync root@ELF1~# reboot
3、PWM測試
待開發板啟動完成,將PWM2設置為輸出
root@ELF1:~#:~# echo 0 > /sys/class/pwm/pwmchip1/export
使能PWM2功能
root@ELF1:~#:~# echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable
設置PWM周期,單位為ns
root@ELF1:~#:~# echo 1000000 > /sys/class/pwm/pwmchip1/pwm0/period
設置PWM占空比為50%
root@ELF1:~#:~# echo 500000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle
此時可以聽到蜂鳴器響起。關閉蜂鳴器,失能PWM2功能
root@ELF1:~#:~# echo 0 > /sys/class/pwm/pwmchip1/pwm0/enable
至此,就完成了在NXP源碼基礎上適配ELF 1開發板的PWM功能,期望這份詳實的指南能為正在閱讀的小伙伴帶來實質性的助益與啟發,在嵌入式開發之旅上,愿我們攜手共進,探索無限可能。
-
單片機
+關注
關注
6037文章
44569瀏覽量
636195 -
嵌入式
+關注
關注
5086文章
19141瀏覽量
305976 -
Linux平臺
+關注
關注
0文章
12瀏覽量
8167 -
開發板系統
+關注
關注
0文章
3瀏覽量
4881 -
學習開發板
+關注
關注
0文章
10瀏覽量
275
發布評論請先 登錄
相關推薦
評論