linux操作系统的arm驱动开发
故名思义:linux操作系统之上的开发
大概思路为:在板子上安装好linux操作系统(板子被linux所保护),一切操作都需要通过linux来运行,若需要添加驱动,就需要把驱动通过linux官方给的添加驱动格式来添加(任何非官方的添加方式会失败),下文为linux添加驱动流程
1在ubuntu写入好程序-----------
以下为vi module.c的标准代码格式
-
-
-
-
-
-
-
MODULE_AUTHOR("xxx");
-
MODULE_LICENSE("Dual BSD/GPL");
-
MODULE_DESCRIPTION("for module test");
-
-
static int mymodule_init(void)
-
{
-
-
printk("module install-axxxxxxxxxxxxxxxx--------------------------\n");
-
return 0;
-
}
-
-
static void mymodule_exit(void)
-
{
-
printk("module release--------------------------------\n");
-
}
-
-
module_init(mymodule_init);
-
module_exit(mymodule_exit);
写入想生成的驱动程序为:
-
#include <linux/init.h>
-
#include <linux/module.h>
-
#include <linux/kernel.h>
-
#include <linux/version.h>
-
#include <asm/io.h>
-
-
MODULE_AUTHOR("xxx");
-
MODULE_LICENSE("Dual BSD/GPL");
-
MODULE_DESCRIPTION("for module test");
-
-
//your code!!!!!
-
-
void led_init(void)
-
{
-
int *gpx2con = ioremap(0x11000c40, 4);
-
*gpx2con = 1<<28;
-
}
-
-
void led_on(void)
-
{
-
int *gpx2dat = ioremap(0x11000c44, 4);
-
*gpx2dat |= 1<<7;
-
}
-
-
void led_off(void)
-
{
-
int *gpx2dat = ioremap(0x11000c44, 4);
-
*gpx2dat &= ~(1<<7);
-
}
-
-
static int mymodule_init(void)
-
{
-
led_init();
-
led_on();
-
-
printk("module install-axxxxxxxxxxxxxxxx--------------------------\n");
-
return 0;
-
}
-
-
static void mymodule_exit(void)
-
{
-
led_off();
-
printk("module release--------------------------------\n");
-
}
-
-
module_init(mymodule_init);
-
module_exit(mymodule_exit);
2通过make将源代码程序编写出来,编写出来生成了一个module.ko文件-------------->
make的源代码:
3将这个文件通过smv或scp module.ko 192.168.12.152(板子所在ip):/发送到板子上面,就可以完成了ko文件的远程发送
发送完毕后再板子中
插入驱动Insmod module.ko就可以看到led灯亮的效果了
拔出驱动rmmod module 就可以看到led灯灭的效果了
另外,这是站在底层所开启关闭驱动的效果,无法达到从应用层来开启关闭驱动
就要引入另外一个概念:
linux的所有驱动由一张哈希表所找到他们的地址,他们的地址都由数字所代表(例如50,1),分成俩部分数字,前方数字为主设备号(一般为0-255),后方数字为次设备号,
而这对于人来说很难记得那么多数字,就需要用一个自定义字符串去代表这些数字;
故分成底层和应用层俩部分:
底层部分:1)在底层去向linux申请新驱动的号码;2)编写并打包好驱动的程序;3)将驱动程序塞进号码里
应用层部分:1)将号码记住 ;2)将底层号码与字符串绑定 mknod c led1 255 0(mknod:指令 c:所在哈希表 led1 :驱动名 255);3)通过系统调用(io接口)操作驱动文件
但这还不及控制驱动的效果,这只是驱动的初始化中添加了功能而已
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgjacjc
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13