打开主菜单

Wiki-Orange Pi β

更改

Orange Pi Win Plus

添加3,711字节, 2022年6月28日 (二) 16:13
OrangePi 驱动程序开发
=== 例程 ===
== OrangePi 驱动程序开发 ==
为帮助开发者更加熟悉 OrangePi,本手册主要描述如何在开发板上使用简单设备驱动模块和应用程序。<br>
'''需要硬件''':OrangePi Win/Win Plus 开发板,读卡器和一张 TF 卡<br>
 
=== 设备驱动和应用程序的编写 ===
'''1)应用程序(app.c):'''<br>
[[Image:I96-45.png]]<br><br>
'''2)驱动程序(OrangePi_misc.c)'''<br>
[[Image:I96-46.png]]<br><br>[[Image:I96-47.png]]<br><br>
 
=== 设备驱动的编译方法 ===
OrangePi_misc.c 拷贝到源码目录下*/lichee/linux-3.10/driver/misc<br>
[[Image:WinPlus-101.png]]<br><br>
进入*/lichee/linux-3.10/drivers/misc/,并修改makefile<br>
修改当前文件的Makefile(如下图所示)<br><br>
[[Image:I96-48.png]]<br><br>
和Makefile同级的文件夹下有Kconfig,每个Kconfig分别描述了所属目录源文件 相关的内核配置菜单,在内核配置make menuconfig时候,从Kconfig中读取配置菜单, <br>
用户配置后保存到.config中。在内核编译时,主Makefile调用这个.config,就知道用户对内核的配置情况。<br>
所以Kconfig就是对应着内核的配置菜单。加入要添加新的驱动到内核源码中, 可以通过修改Kconfig来增加对我们驱动的配置菜单,这样就可以在menuconfig里面选择我们驱动是否被编译。<br><br>
[[Image:I96-49.png]]<br><br>
回到源码目录下<br><br>
[[Image:WinPlus-103.png]]<br><br>
$ ./build.sh<br>
编译内核,之后会在 lichee/linux-3.10/output/lib/modules/3.10.65下面产生一个 orangepi_misc.ko 文件:<br><br>
[[Image:WinPlus-104.png]]<br><br>
能发现在*/lichee/linux-3.10/output/lib/modules/3.10.65/产生一个.ko文件,这就是刚刚的OrangePi_misc.c经过编译之后产生的模块。<br>
插上U 盘(注意此时SD 卡已经烧好镜像) 如果此时SD 卡挂载到系统的/dev/sdb 目录下,SD 将会有两个子挂载点,分别为 /dev/sdb1 和 /dev/sdb2。<br>
SD 卡的两个分区会自动挂载到 PC 上的 /media/ 目录下,第一个分区是 boot 分区,第二个分区为 rootfs 分区。<br><br>
[[Image:WinPlus-105.png]]<br><br>
把OrangePi_misc.ko文件复制到/media/*/lib/modules/3.10.65 里 $ cp OrangePi_misc.ko /media/*/lib/modules/3.10.65
 
=== 交叉编译器编译应用程序 ===
以arm-linux-gnueabihf-gcc为例子讲述如何安装变差编译器。首先查询是否有下面这个交叉编译器,没有下载安装<br>
$ arm-linux-gnueabihf-gcc -v<br>
[[Image:WinPlus-106.png]]<br><br>
编译应用程序,发现所需要的交叉编译器是arm-linux-gnueabihf-gcc,网上下载并安装<br><br>
[[Image:WinPlus-107.png]]<br><br>
解压并进入解压之后的目录<br><br>
[[Image:WinPlus-108.png]]<br><br>
进入 bin 目录下,查看内容<br><br>
[[Image:WinPlus-109.png]]<br><br>
pwd显示该路径,并将这个路径倒到全局<br><br>
[[Image:WinPlus-110.png]]<br><br>
$ ll /etc/environment 发现该文件只能读,需要<br>
$ chmod 755 /etc/environment 修改权限<br><br>
[[Image:WinPlus-111.png]]<br><br>
把路径加入全局环境变量中<br><br>
[[Image:WinPlus-112.png]]<br><br>
有了交叉编译器,编译应用程序 $ arm-linux-gnueabihf-gcc app.c –o aq<br><br>
之后在目录下产生一个aq的应用程序,将应用程序aq复制到开发板文件系统(rootfs的/home/orangepi/下)<br>
$ cp aq /media/*/home/orangepi/<br><br>
 
=== 驱动和程序的运行方式 ===
将卡取下,插入开发板,上电开机。<br>
首先要切换成root用户,开发板下加载模块驱动模块<br>
$ insmod /lib/modules/Orangepi_misc.ko<br>
$ lsmod 看下是否加载上<br><br>
[[Image:WinPlus-113.png]]<br><br>
$ ll /dev/orangepimisc(杂项设备自动生成设备文件,具体看驱动代码)<br><br>
[[Image:WinPlus-114.png]]<br><br>
执行应用程序(注意应用程序的用法,具体看代码)<br>
$ ./aq /dev/orangepimisc <br><br>
 
== 串口调试工具介绍 ==
需要硬件:OrangePi Win/Win Plus 开发板,读卡器和一张 TF 卡<br><br>
8,460
个编辑