linux驱动开发要有哪些基础

linux驱动开发要有哪些基础,第1张

需要一定的努力才可以学好:

Linux设备驱动是linux内核的一部分,是用来屏蔽硬件细节,为上层提供标准接口的一种技术手段。为了能够编写出质量比较高的驱动程序,要求工程师必须具备以下几个方面的知识:

1、 熟悉处理器的性能

如:处理器的体系结构、汇编语言、工作模式、异常处理等。对于初学者来说,在还不熟悉驱动编写方法的情况下,可以先不把重心放在这一项上,因为可能因为它的枯燥、抽象而影响到你对设备驱动的兴趣。随着你不断地熟悉驱动的编写,你会很自然的意识到此项的重要性。

2、掌握驱动目标的硬件工作原理及通讯协议

如:串口控制器、显卡控制器、硬件编解码、存储卡控制器、I2C通讯、SPI通讯、USB通讯、SDIO通讯、I2S通讯、PCI通讯等。编写设备驱动的前提就是需要了解设备的 *** 作方法,所以这些内容的重要程度不言而喻。但不是说要把所有设备的 *** 作方法都熟悉了以后才可以写驱动,你只需要了解你要驱动的硬件就可以了。

一、掌握硬件的控制方法

如:中断、轮询、DMA 等,通常一个硬件控制器会有多种控制方法,你需要根据系统性能的需要合理的选择 *** 作方法。初学阶段以实现功能为目的,掌握的顺序应该是,轮询->中断->DMA。随着学习的深入,需要综合考虑系统的性能需求,采取合适的方法。

二、良好的GNU C语言编程基础

如:C语言的指针、结构体、内存 *** 作、链表、队列、栈、C和汇编混合编程等。这些编程语法是编写设备驱动的基础,无论对于初学者还是有经验者都非常重要。

三、 良好的linux *** 作系统概念

如:多进程、多线程、进程调度、进程抢占、进程上下文、虚拟内存、原子 *** 作、阻塞、睡眠、同步等概念及它们之间的关系。这些概念及方法在设备驱动里的使用是linux设备驱动区别单片机编程的最大特点,只有理解了它们才会编写出高质量的驱动。

四、掌握linux内核中设备驱动的编写接口

如:字符设备的cdev、块设备的gendisk、网络设备的net_device,以及基于这些基本接口的framebuffer设备的fb_info、mtd设备的mtd_info、tty设备的tty_driver、usb设备的usb_driver、mmc设备的mmc_host等。

以装载和卸载模块为例:

1、首先输入代码

#include <linux/init.h>

#include <linux/module.h>

2、然后输入下方的代码:

static int my_init(void)

{

                    return  0

}

static void my_exit(void)

3、然后在输入下方的代码:

{

                    return

}

module_init(my_init)

module_exit(my_exit)这样就完成了。

linux常用的语言就是shell和python,首先我们得先了解语言的概念

<<-EOF

EOF

编写一个简单的bash档如下:

我们可以看到用./执行bash档时,没有进入到/home目录下,这种我们称为 在子shell中执行 ,其不影响当前shell的状况(有时候执行成功没有效果的原因)。但是无论是. 执行还是source执行我们都成功进入了home路径下,这我们称之为 在当前shell执行

su nologinshell 不加载用户的shell

su - loginshell 加载用户的shell

可以很明显的看出来,当用不加载用户的shell加载用户时,是不会具有当前加载用户的权限的,很像windows中的游客模式

history历史记录缓存

~/.bash_history退出后写入缓存

~/.bash_logout退出后执行

在这一层,顺带按图索骥,理解一下linux系统开机的历程。红字:系统层开机/切换用户历程;蓝字:用户层开机/切换用户历程;黄字:用户层关机历程。

曾经玩过一个游戏:在用户指令关机时,会有一辆小火车开过,所以我们可以把调用小火车开过的程式调用写在?

1、命令和文件的自动补齐shift

2、命令的历史记忆功能:上下键、!number 执行第多少条命令、

!string 找到最近以string开头的命令、!&上一个命令最后的参数、

!! 执行上一个命令、^R 搜索历史命令

3、别名功能:alias查看别名、unalias取消别名、(命名前加\斜线跳过别名)

alias xx=’xx’ 定义临时别名、vim ~/.bashrc定义永久别名

4.快捷键:^D退出、^A 光标移动到命令最前、^E光标移动到命令最后、

^L 清屏、^U 往前的删掉、^K往后的删掉、^Y撤销、^M 回车

^S 锁屏、^Q 解除锁屏

5.前后台作业控制:&后台不保留、nohup 后台保留、screen

&& ||(命令返回值echo &?)

*任意多个字符

?任意一个字符

[]匹配括号内任意一个字符

()在子shell中执行

{}集合

\转义字符

注意点:echo -e “a\tb”

$? 前一条命令的执行成功与否

$1 传入的第一个参数 $2 $3 位置变量

没有使用环境变量的必要性

练习内容:读取用户指定文档的ip连通性

bc计算器

假设我们定义了一个变量为:

记忆的方法为:

利用${ } 还可针对不同的变数状态赋值(没设定、空值、非空值):


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7575491.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-07
下一篇 2023-04-07

发表评论

登录后才能评论

评论列表(0条)

保存