本次源碼適配項(xiàng)目是在NXP i.MX6ULL EVK評(píng)估板所搭載的Linux內(nèi)核源碼(版本為Linux-imx_4.1.15)基礎(chǔ)上進(jìn)行的,主要目標(biāo)是通過調(diào)整功能接口引腳配置,使其適應(yīng)ELF 1開發(fā)板。為了深入闡述這一適配過程,我們將以PWM功能的適配作為具體示例,深入解析整個(gè)流程。
1、準(zhǔn)備工作
NXP源碼路徑:ELF1開發(fā)板資料包\07-NXP 原廠資料\07-1 NXP官方源碼\linux-imx-imx_4.1.15_2.0.0_ga.tar.bz2
(1)將NXP源碼拷貝到開發(fā)環(huán)境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)添加默認(rèn)配置文件
將arch/arm/configs路徑下的imx_v7_mfg_defconfig復(fù)制一份,命名為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設(shè)備樹
將arch/arm/boot/dts路徑下的imx6ull-14x14-evk.dts復(fù)制一份,命名為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)建立交叉編譯腳本
建立一個(gè)編譯腳本build.sh
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vim build.sh
添加以下內(nèi)容,保存退出
#!/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 *
給予腳本權(quán)限
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ chmod 777 build.sh
2、適配PWM
(1)硬件原理
開發(fā)板上控制蜂鳴器的引腳網(wǎng)絡(luò)名為PWM2,通過引腳網(wǎng)絡(luò)名可確定到其球號(hào)為M15,再通過球號(hào)確定到引腳名稱PAD NAME為GPIO1_IO09。
(2)IOMUX配置
從上圖可以看出PWM2連接到了連接器的65腳。接下來我們需要找到這個(gè)引腳在軟件上的信號(hào)名稱。
打開ELF 1開發(fā)板資料包\05-硬件資料\05-4 管腳分配表\ELF 1引腳復(fù)用對(duì)照表找到65引腳的信號(hào)名稱。
可以看到連接器的65引腳信號(hào)名稱為GPIO1_IO09。
因?yàn)樾枰褂肞WM控制蜂鳴器,所以需要把它復(fù)用成PWM功能,在arch/arm/boot/dts/imx6ul-pinfunc.h中找到它們的宏定義,如下:
打開設(shè)備樹文件arch/arm/boot/dts/imx6ull-elf1-emmc.dts,在&iomux節(jié)點(diǎn)下添加子節(jié)點(diǎn)pinctrl_pwm2:
pinctrl_pwm2: pwm2grp { fsl,pins = < MX6UL_PAD_GPIO1_IO09__PWM2_OUT 0x110b0 >; };
效果如下:
配置完P(guān)WM2之后,檢查設(shè)備樹中是否把GPIO1_IO09復(fù)用成其它功能了。在arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件中搜索引腳PAD NAME“GPIO1_IO09”,在&iomux的子節(jié)點(diǎn)pinctrl_hog_1節(jié)點(diǎn)下搜索到了GPIO1_IO09的另一個(gè)功能復(fù)用配置,將該引腳復(fù)用成了GPIO功能,用于TF卡的復(fù)位,ELF 1開發(fā)板沒有使用此功能,可以將其注釋掉。
此外,還需要注釋掉節(jié)點(diǎn)下的如下內(nèi)容
(3)設(shè)備節(jié)點(diǎn)配置
在設(shè)備樹文件arch/arm/boot/dts/imx6ull.dtsi中已經(jīng)定義好了8路PWM信號(hào)的相關(guān)節(jié)點(diǎn),只需要將PWM2的時(shí)鐘配置上即可,將clocks屬性的IMX6UL_CLK_DUMMY更改為IMX6UL_CLK_PWM2。
打開arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件,已經(jīng)存在PWM1相關(guān)節(jié)點(diǎn),PWM1是輸出給LCD的背光使用的。在&pwm1節(jié)點(diǎn)下添加節(jié)點(diǎn)&pwm2。
&pwm2 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_pwm2>; status = "okay"; };
效果如下:
(4)編譯
由于pwm只涉及到設(shè)備樹修改,不再使用腳本編譯,單獨(dú)編譯設(shè)備樹即可。
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開發(fā)板的/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/
保存并重啟開發(fā)板
root@ELF1~# sync root@ELF1~# reboot
3、PWM測試
待開發(fā)板啟動(dòng)完成,將PWM2設(shè)置為輸出
root@ELF1:~#:~# echo 0 > /sys/class/pwm/pwmchip1/export
使能PWM2功能
root@ELF1:~#:~# echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable
設(shè)置PWM周期,單位為ns
root@ELF1:~#:~# echo 1000000 > /sys/class/pwm/pwmchip1/pwm0/period
設(shè)置PWM占空比為50%
root@ELF1:~#:~# echo 500000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle
此時(shí)可以聽到蜂鳴器響起。關(guān)閉蜂鳴器,失能PWM2功能
root@ELF1:~#:~# echo 0 > /sys/class/pwm/pwmchip1/pwm0/enable
至此,就完成了在NXP源碼基礎(chǔ)上適配ELF 1開發(fā)板的PWM功能,期望這份詳實(shí)的指南能為正在閱讀的小伙伴帶來實(shí)質(zhì)性的助益與啟發(fā),在嵌入式開發(fā)之旅上,愿我們攜手共進(jìn),探索無限可能。
-
單片機(jī)
+關(guān)注
關(guān)注
6030文章
44489瀏覽量
631958 -
嵌入式
+關(guān)注
關(guān)注
5059文章
18973瀏覽量
301995 -
Linux平臺(tái)
+關(guān)注
關(guān)注
0文章
11瀏覽量
8129 -
開發(fā)板系統(tǒng)
+關(guān)注
關(guān)注
0文章
3瀏覽量
4864 -
學(xué)習(xí)開發(fā)板
+關(guān)注
關(guān)注
0文章
10瀏覽量
234
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論