linux驱动开发环境搭建

目录

一、先用集成烧录工具 mfgtool 烧录对应开发板的代码

二、文件准备

三、用nfs或ftpt挂接根文件系统

四、编译的模块的内核版本和加载的内核版本要同一个版本,不然会报错:

五、把驱动程序复制到指定文件:

六、加载 led.ko 驱动模块 

七、卸载驱动 

八、设备节点的名字与设备树节点的名字,有什么区别和联系,proc/device-tree显示的是哪一个节点?


一、先用集成烧录工具 mfgtool 烧录对应开发板的代码

1、MfgTool烧写的原理:

MfgTool其实是先通过 USB OTG先将uboot、 kernel和.dtb(设备树)这是三个文件下载到开发板的 DDR 中,注意不需要下载 rootfs。 就相当于直接在开发板的 DDR上启动Linux系统,等Linux系统启动以后再向EMMC中烧写完整的系统,包括uboot、linuxkernel、 .dtb(设备树)和 rootfs,因此 MfgTool 工作过程主要分两个阶段:

(1) 将firmware目录中的uboot、 linux kernel和.dtb(设备树),然后通过USB OTG将这个文件下载到开发板的DDR中, 目的就是在DDR中启动Linux系统,为后面的烧写做准备。

(2) 经过第(1)步的操作,此时Linux系统已经运行起来了,系统运行起来以后就可以很方便的完成对EMMC的格式化、分区等操作。 EMMC分区建立好以后就可以从files中读取要烧写的uboot、 linux kernel、 .dtb(设备树)和rootfs这4个文件,然后将其烧写到EMMC中,这个就是 MfgTool的大概工作流程。

2、firmeare 文件夹

将如下三个文件替换成自己编译出来的文件:

3、files 文件夹

将如下四个文件替换成自己编译出来的文件:

二、文件准备

   1、uboot:

      a.配置

      b.编译

  2、kernel(内核):

      a.配置

      b.编译  运行 ./mx6ull_alientek_emmc.sh 

      c.内核文件:arch/arm/boot/zImage

       d. 设备树文件:arch/arm/boot/dts 对应的.dtb文件

   3、.dtb(设备树):

   4、rootfs(根文件系统):

      

三、用nfs或ftpt挂接根文件系统

   1、在虚拟机 安装,配置,然后再启动nfs服务;

  2、虚拟机网络设置成桥接模式;

   3、设置开发板的网络环境:

      setenv ipaddr 192.168.1.50        //设置开发板地址
      setenv ethaddr b8:ae:1d:01:00:00   
      setenv gatewayip 192.168.1.1     //设置网关地址
      setenv netmask 255.255.255.0 

      setenv serverip 192.168.1.253     //设置虚拟机地址
      saveenv 

    4、在开发板ping通与虚拟机的地址;

       命令使用:ping 服务器地址

注意!只能在 uboot中ping其他的机器,其他机器不能 ping uboot,因为uboot没有对 ping 命令做处理,如果用其他的机器 ping uboot 的话会失败!

   5、设置开发板 bootcmd 环境变量

      setenv bootcmd ‘nfs 80800000 192.168.31.116:/home/can/linux/nfs/zImage;nfs 83000000 192.168.31.116:/home/can/linux/nfs/imx6ull-alientek-emmc.dtb;bootz 80800000 - 8300000’

      saveenv

   6、设置开发板 bootargs

setenv bootargs ‘console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.31.116:/home/can/linux/nfs/rootfs ip=192.168.31.50:192.168.31.116:192.168.31.1:255.255.255.0::eth0:off

四、编译的模块的内核版本和加载的内核版本要同一个版本,不然会报错:

hrdevbase: version magic '4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8 ’ should be '4.1.15 SMP preempt mod_unload modversions ARMv7 p2v8 ’

 问题原因:这种报错是内核版本和模块版本不一致,所以导致加载不成功

 解决:重新编译 重新编译内核和模块驱动程序,然后重新启动并重新加载新的驱动;

五、把驱动程序复制到指定文件:

sudo cp led.ko /home/can/linux/nfs/rootfs/lib/modules/4.1.15/ -f

六、加载 led.ko 驱动模块 

depmod    //第一次加载驱动的时候需要运行此命令
modprobe led.ko   //加载驱动 

驱动加载成功以后创建“/dev/led”设备节点,命令如下:
mknod /dev/led c 200 0

七、卸载驱动 

rmmod led.ko

八、设备节点的名字与设备树节点的名字,有什么区别和联系,proc/device-tree显示的是哪一个节点?

1、在 /lib/modules/4.0.15 目录下查看当前系统存在的模块指令:

    lsmod

2、查看系统挂接的设备节点和对应的主设备号:

    cat /proc/devices

3、查看设备树节点:进入 /proc/device-tree 目录:

    ls

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值