使用正点原子i.mx6ull加载字符驱动模块chrdevbase

搞了整整两天才整好!踩了不少坑,记录一下

0. 操作基础

操作前需要设置好如下配置
1.开发板和ubuntu能够互相ping通
使用正点原子i.mx6ull加载字符驱动模块chrdevbase_第1张图片

2.开发板的SD卡中安装好uboot,我用的V2.4版本的,其他版本应该也行
在这里插入图片描述
3.准备材料

  1. 01_chrdevbase文件
    使用正点原子i.mx6ull加载字符驱动模块chrdevbase_第2张图片
  2. linux-imx-rel_imx_4.1.15_2.1.1_ga_alientek_v2.4.tar.bz2
    这个文件在01、例程源码->10、开发板教程对应的uboot和linux源码->02、linux中->V2.4版本及以后版本底板使用的linux 路径下
    在这里插入图片描述

1. 配置I.MX6ULL

  1. 开发板调至SD卡启动方式
    使用正点原子i.mx6ull加载字符驱动模块chrdevbase_第3张图片
    注意只启动u-boot即可,及时按回车
    使用正点原子i.mx6ull加载字符驱动模块chrdevbase_第4张图片
  2. 设置环境变量
    环境变量中的ip、rootfs路径等需要根据实际情况调整
setenv bootargs "console=ttymxc0,115200 rw nfsroot=192.168.5.252:/home/alientek/linux/nfs/rootfs ip=192.168.5.251:192.168.5.252:192.168.5.1:255.255.255.0::eth0:off"

setenv bootcmd "tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000"

saveenv

红色箭头里面的值需要根据自己的实际情况进行调整
在这里插入图片描述

2. 编译 linux-imx-rel_imx_4.1.15_2.1.1_ga_alientek_v2.4.tar.bz2

  1. 将linux-imx-rel_imx_4.1.15_2.1.1_ga_alientek_v2.4.tar.bz2压缩包复制到Ubuntu中
  2. 输入命令解压压缩包 tar -vxjf linux-imx-rel_imx_4.1.15_2.1.1_ga_alientek_v2.4.tar.bz2
    解压后图下
    在这里插入图片描述
  3. 创建imx6ull_alientek_emmc.sh 命令为gedit imx6ull_alientek_emmc.sh
    在imx6ull_alientek_emmc.sh中输入如下代码
#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_alientek_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j12
  1. 输入如下命令编译linux内核
./imx6ull_alientek_emmc.sh

在这里插入图片描述
5. 找到zImage和imx6ull-alientek-emmc.dtb
zImage在arch/arm/boot/路径下,imx6ull-alientek-emmc.dtb在dts路径下 在这里插入图片描述

  1. 将zImage和imx6ull-alientek-emmc.dtb拷贝值tftp和nfs文件夹中
    这里的nfs和tftp是开发板挂载到ubuntu的文件夹,可以和ubuntu互相通信
    tftp和nfs文件夹的路径必须和刚才步骤一设置的环境变量相同,不然无法通信
    在这里插入图片描述
    在这里插入图片描述

3. 编译字符驱动设备文件

  1. 将刚才准备的01_chrdevbase文件夹中的文件拷贝到ubuntu中
    在这里插入图片描述
  2. 打卡Makefile文件,修改Makefile中的KERNELDIR的路径
    这个路径其实就是刚才弄的linux内核的路径
    使用正点原子i.mx6ull加载字符驱动模块chrdevbase_第5张图片
  3. 编译字符驱动设备
    使用正点原子i.mx6ull加载字符驱动模块chrdevbase_第6张图片

4. 启动linux内核

  1. 输入boot,可以看到开始启动内核
    使用正点原子i.mx6ull加载字符驱动模块chrdevbase_第7张图片
  2. 输入命令 modprobe
    如果提示没有4.1.15这个文件夹,那么自己创建一下
    在这个路径下创建/lib/modules/4.1.15”
    在这里插入图片描述
  3. 将ubuntu中的chrdevbase.ko拷贝到开发板的/lib/modules/4.1.15中
    输入如下命令进行拷贝
sudo cp chrdevbase.ko /home/alientek/linux/nfs/rootfs/lib/modules/4.1.15/ -f

在这里插入图片描述

  1. 建立依赖
    输入depmod命令
    在这里插入图片描述
  2. 加载字符驱动文件
  3. 输入modprobe chrdevbase.ko 和
    使用正点原子i.mx6ull加载字符驱动模块chrdevbase_第8张图片
    这里可以看到字符驱动设备已经被成功加载!

总结:

花了整整两天时间才弄好字符驱动模块的加载操作

我是看了正点原子第三期才开始弄第四期的,但是第三期是跳着看的,(因为实在是看不下去,感觉讲的抓不住重点,一看就想睡觉,晦涩难懂)

由于步骤很繁琐,这个教程写的并不是很详细,如果你是第一次调试字符设备驱动,建议结合B站的这个视频教程中的3.2讲《我的第一个Linux驱动-驱动模块加载与卸载实验》来进行学习
使用正点原子i.mx6ull加载字符驱动模块chrdevbase_第9张图片

你可能感兴趣的:(正点原子,字符驱动设备,i.mx6ull)