随笔分类 - Drivers
摘要:在前一篇文章中,我们处理了GPIO lines。这些lines通过一个叫做GPIO控制器的特殊设备向系统开放。本章将逐步解释如何为这些设备编写驱动程序,因此包括以下主题: GPIO控制器驱动结构和数据结构 GPIO控制器的Sysfs接口 GPIO控制器在DT中的表示 驱动架构和数据结构 此类设备的驱
阅读全文
摘要:大多数嵌入式Linux驱动程序和内核工程师使用gpio编写或使用pin多路复用。所谓引脚,我指的是组件的引出线。SoC做多引脚复用,这意味着一个引脚可能有几个功能; 例如,arch/arm/boot/dts/imx6dl- pinfunction .h中的MX6QDL_PAD_SD3_DAT1可以是
阅读全文
摘要:在测试读写IS25LP064 spi flash的时候, 在把IS25LP064的前128bytes都写为0x00后,出现了spi flash不能擦除的问题,读是OK的。 在查看了IS25LP064的 datasheet 后,发现可能是 write status寄存器(0x01)的值被设为 Bloc
阅读全文
摘要:一、从内核调用用户空间应用程序 用户空间应用程序大多数时候是由其他应用程序从用户空间中调用的,不深入细节,让我们看一个例子: 1 #include <linux/init.h> 2 #include <linux/module.h> 3 #include <linux/workqueue.h> /*
阅读全文
摘要:不想加载某个模块 对于在 /lib/modules/xxx/kernel/drivers/ 目录下的模块,内核在启动时会自动加载,如果不想某个模块自动加载可以在 /etc/modprobe.d/blacklist.conf 配置文件中加入如下行: blacklist modulename modul
阅读全文
摘要:问题描述: 两个ambarella peanut板子的网口之间用网线直连,会发现不能自动协商成功(网口灯不亮),但是ambarella peanut板子的网口和其他X86 Linux机器网口直连可以协商成功(网口灯亮)。 对于想使用peanut板子网口作LAN口,给其他peanut 板子DHCP分配
阅读全文
摘要:在Linux系统中,终端是一种字符型设备,它有多种类型,通常使用 tty 来简称各种类型的终端设备。tty 是 Teletype 的缩写,Teletype 是最早出现的一种终端设备,很像电传打字机,是由 Teletype 公司生产的。Linux 中包含如下几类终端设备。 1. 串行端口终端(/dev
阅读全文
摘要:一、DM9000 网卡硬件描述 DM9000是开发板采用的网络芯片,是一个高度集成且功耗很低的告诉网络控制器,可以和 CPU 直连,支持 10/100MB 以太网连接,芯片内部自带 4KB 双字节的 SRAM (3KB用来发送, 13KB用来接收)。针对不同的处理器,接口支持 8 位、16 位和 3
阅读全文
摘要:网络设备的驱动程序提供一些供系统对设备的参数进行设置 或 读取设备相关信息的方法。 当用户调用 ioctl() 函数,并指定 SIOCSIFHWADDR 命令时,意味着要设置这个设备的 MAC 地址。设置网络设备的 MAC 地址可用如下代码所示的模板: 1 /* 2 * 设置网络设备的 MAC 地址
阅读全文
摘要:网络适配器硬件电路可以检测出链路上是否有载波,载波反映了网络的连接是否正常。网络设备驱动可以通过 netif_carrier_on() 和 netif_carrier_off() 函数改变设备的连接状态,如果驱动检测到连接状态发生变化,也应该以 netif_carrier_on() 和 netif_
阅读全文
摘要:网络设备接收数据的主要方法是由中断引发设备的中断处理函数,中断处理函数判断中断类型,如果为接收中断,则读取接收到的数据,分配 sk_buffer 数据结构和数据缓冲区,将接收到的数据复制到数据缓冲区,并调用 netif_rx() 函数将 sk_buffer 传递给上层协议。下面是完成这个过程的函数模
阅读全文
摘要:从网络设备驱动的结构分析可知,Linux 网络子系统在发送数据包时,会调用驱动程序提供的 hard_start_transmit( ) 函数,该函数用于启动数据包的发送。在设备初始化的时候,这个函数指针需被初始化以指向设备的 xxx_tx( )函数。 网络设备驱动完成数据包发送的流程如下。 网络设备
阅读全文
摘要:网络设备的打开函数需要完成如下工作: 使能设备使用的硬件资源,申请 I/O 区域、中断和 DMA 通道等。 调用 Linux 内核提供的 netif_start_queue( )函数,激活设备发送队列。 网络设备的关闭函数需要完成如下工作: 调用 Linux 内核提供的 netif_stop_que
阅读全文
摘要:网络设备的初始化主要完成如下几个方面的工作。 进行硬件上的准备工作,检查网络设备是否存在,如果存在,则检测设备所使用的硬件资源。 进行软件接口上的准备工作,分配 net_device 结构体并对其数据结构和函数指针成员赋值。 获得设备的私有信息指针并初始化各成员的值。如果私有信息中包括自旋锁或信号量
阅读全文
摘要:网络设备驱动的注册与注销由 register_netdev( ) 和 unregister_netdev( ) 函数完成,这两个函数的原型为: /** * register_netdev - register a network device * @dev: device to register *
阅读全文
摘要:网络设备是完成用户数据包在网络媒介上发送和接收的设备,它将上层协议传递下来的数据包以特定的媒介访问控制方式进行发送,并将接收到的数据包传递给上层协议。 Linux系统对网络设备驱动定义了4个层次,这4个层次分别为: 1)网络协议接口层; 2)网络设备接口层; 3)提供实际功能的设备驱动功能层; 4)
阅读全文
摘要:公司最近开发的一款产品用到了ambarella H2平台的一款Soc,众所周知ambarella的H2系列的Soc编码能力很强,最高可达4kp60,捕捉上没有用ambarella开发板推荐的几个捕捉卡,是自己用fpga做的一款捕捉卡, 所以捕捉卡驱动需要自己来写。 捕捉卡驱动其实没有什么东西,就是简
阅读全文
摘要:ambarella H2系列Soc的GPIO口能作PWM使用的个数有限(GPIO0-GPIO3),从PRM里GPIO: Function Selection章节可以得到如何配置GPIO为PWM功能。 假设想把GPIO0配置成PWM输出,根据上图修改ambarella/boards/h2_xxx/bs
阅读全文
摘要:1 模块参数 定义模块参数 1、module_param(name, type, perm); 定义一个模块参数, name 变量名 type 数据类型 bool:布尔型 invbool:一个布尔型( true 或者 false)值(相关的变量应当是 int 类型).invbool 类型颠倒了值,所
阅读全文