IMX6ULLPRO交叉编译第一个APP和第一个led驱动
目录
配置交叉编译工具链
永久生效
测试交叉编译工具链
第一个交叉编译程序
开发板运行
LED第一个驱动
开发板下操作
执行测试程序
配置交叉编译工具链
交叉编译工具链用来在 Ubuntu 主机上编译应用程序,而这些应用程序是在
ARM 等其他平台上运行。
设置交叉编译工具主要是设置 PATH , ARCH 和 CROSS_COMPILE 三个环境变
量,下面介绍具体设置方法。
在本文档中,源码、交叉编译工具链都是存放于 /home/book 目录下;如果 你的目录不一样,请自行修改本节所讲述的命令。
永久生效
如需永久修改,请修改用户配置文件:
vim ~/.bashrc
在行尾添加或修改,加上下面几行 ( 请把第 3 、 4 行合并为一行,有些 PDF 工 具无法正确复制甚至丢失“ - ”符号,请仔细对比 ) :
export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
export PATH=$PATH:/home/chl/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
设置完毕后,要执行
source ~/.bashrc
命令使其生效,并通过
arm-buildroot-linux-gnueabihf-gcc -v
命令来验证是否配置成功:
以上操作是设置 IMX6ULL Pro 版工具链的过程。
测试交叉编译工具链
echo $ARCHecho $CROSS_COMPILE
执行以下命令测试工具链,结果见后图 2.17:
arm-buildroot-linux-gnueabihf-gcc -v
第一个交叉编译程序
git clone https://e.coding.net/weidongshan/01_all_series_quickstart.git
cd 01_all_series_quickstart\\04_嵌入式 Linux 应用开发基础知识\\source\\01_hello
arm-buildroot-linux-gnueabihf-gcc -o hello hello.c
cp hello /home/book/nfs_rootfs
开发板运行
mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs/ /mnt
cp /mnt/hello .
./hello
file hello //查看文件类型
LED第一个驱动
注意:编译驱动时,要先编译内核,内核在IMX6ULLPRO单独编译kernel+dtb内核模块以及uboot_陈学弟的博客-CSDN博客y
led 驱动在 GIT 仓库里,由于前面已经克隆了这边就不需要重复了
目录位置如下:
01_all_series_quickstart/ 05_ 嵌入式 Linux 驱动开发基础知识 / source/02_led_drv/02_led_drv_for_boards/100ask_imx6ull_src_bin
首 先 , 进 入 100ask_imx6ull_src_bin 目 录 , 修 改 Makefile 文 件
“ KERN_DIR ”为自己的内核所在路径。如图 5.7 红框所示,如果你的内核源码
不在此目录则根据你的实际情况进行修改:
由于我的路径不一样所以我进行了修改
修改后执行下面的指令
make cleanmake
编译完成后会生成 100ask_led.ko ledtest 两个文件
此时,把这两个文件拷贝到 Ubuntu nfs 目录下备用:
cp 100ask_led.ko ledtest /home/book/nfs_rootfs //这里根据的自己的路径来安排
开发板下操作
注意开发板要和Ubantu能够ping通
mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt
cp /mnt/100ask_led.ko ./
cp /mnt/ledtest ./
安装驱动模块
insmod 100ask_led.ko
insmod 100ask_led.ko
安装完成后可以执行 lsmod 命令来查看是否安装成功,如图 5.9 所示:
执行测试程序
驱动模块安装成功后,就可以使用测试程序来控制 led 灯的状态,如图 5.12
所示,操作 led 灯时可同时观察开发板串口旁的灯是否有亮灭的变化。
[root@100ask:~]# chmod +x ./ledtest
[root@100ask:~]# ./ledtest
Usage: ./ledtest <dev> <on | off>
[root@100ask:~]# ./ledtest /dev/100ask_led0 on //打开 led0 灯
[root@100ask:~]# ./ledtest /dev/100ask_led0 off //关闭 led0 灯