Orangepi3_lts字符驱动编写框架及具体步骤

最近学习linux驱动,刚好手中有一块orangepi3_lts开发板,所以鼓捣了一下。首先下载官方的驱动源码,这个官方的数据手册已经说明的很清楚了,这里我就不再赘述了,按照官方用户手册去操作就行了。拿到源码之后确保源码可以正常编译,这个官方手册也有详细的操作步骤,同样也不再赘述。下面直接进入具体环节。官方Linux内核源码编译之后会生成3个deb包。

linux-dtb-current-sun50iw6_3.1.0_arm64.deb
linux-headers-current-sun50iw6_3.1.0_arm64.deb
linux-image-current-sun50iw6_3.1.0_arm64.deb

这三个deb包分别为包含内核使用的dtb文件、包含内核头文件、包含内核镜像和内核模块。这三个可以用来更新我们开发板的内核程序。我们需要将这三个文件发送给我们的开发板,通过网络发送,需要我们的开发板连接wifi或者以太网。

scp linux-* root@192.168.1.xxx:/root

此命令是将linux-开头的文件发送到我们开发板根目录的root文件夹里,后面是开发板对应的if地址,可以使用ifconfig命令查看。

之后在我们开发板里进入root文件夹目录,通过下面命令查看已经安装的deb包。

dpkg --list | grep linux-

然后使用如下命令卸载。

sudo apt purge -y linux-*

然后输入如下命令安装新编译的deb包。

sudo dpkg -i linux-*

安装之后就可以正常加载我们自己写的内核模块了,实际上经过测试只安装headers对应的deb包就可以正常加载我们自己写的内核模块了。至于驱动程序怎么写就下次再说了,而且网上也有很多开源的可以直接用,我就不再赘述了。

下面介绍加载内核模块的方法。

通常情况下加载外部驱动模块有两种方法:

1.直接在原有内核源码的基础上修改,之后编译成镜像下载到开发板里。

2.将外部驱动在内核源码目录里编译成ko文件,然后使用insmod或modprobe命令直接加载到开发板上。

通常情况下第一种方法耗时比较长,所以我们一般采用第二种方法,一是节约时间,二是方便。

而对于orangepi3_lts来说,有点小问题,就是他的内核模块不能在虚拟机里编译成ko文件,只能将外部驱动源码发送到开发板在开发板里编译成ko文件(不知道各位大佬有没有解决办法)。将内核源码发送到开发板,利用安装的headers可以直接make编译成ko文件,然后使用insmod就可以加载内核模块到驱动里了。使用如下命令可以查看加载的驱动对应的设备号了。

cat /proc/devices

加载完驱动之后使用如下命令创建设备节点文件,方便调用该驱动测试上层应用程序。其中c表示是字符设备,200表示是主设备号(即上面命令查到的设备号),0表示次设备号。

mknod /dev/chardev c 200 0

之后编写测试app文件chardevApp.c,可以在虚拟机中将其交叉编译成在arm中可以运行的文件chardevApp,命令如下。

/home/chuan-plus/my_orangepi3_lts/toolchain/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc chardevApp.c -o chardevApp

之后同样将其发送到开发板。

scp chardevApp root@192.168.1.xxx:/root

之后就可以在开发板上运行我们的测试程序了。

./chardevApp /dev/chardev 1

如果不在需要这个驱动了,可以使用如下命令将驱动卸载。

rmmod chardev

至此,orangepi3_lts测试驱动就结束就,希望对各位有所帮助,有什么问题可以与我交流。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值