计算机网络基础知识
开一个新的篇章,同时进行学习,只学习一种知识点太枯燥了,有点难啃。并且看到有的招聘网站上需要tcp/ip协议的科技树,所以学习一下。
参考书为《图解TCP_IP》
网络通信网络通信本质上是一种进程间通信,是位于网络中不同主机上的进程之间的通信,属于 IPC 的一种,通常称为 socket IPC
网络通信是为了解决在网络环境中,不同主机上的应用程序之间的通信问题。大概可以分为三个层次,如下所示:(1)、硬件层:网卡设备,收发网络数据(2)、驱动层:网卡驱动(Linux 内核网卡驱动代码)(3)、应用层:上层应用程序(调用 socket 接口或更高级别接口实现网络相关应用程序)
在硬件上,两台主机都提供了网卡设备,也就满足了进行网络通信最基本的要求,网卡设备是实现网络数据收发的硬件基础。并且通信的两台主机之间需要建立网络连接,这样两台主机之间才可以进行数据传输。网络数据的传输媒介有很多种,大体上分为有线传输(譬如双绞线网线、光纤等)和无线传输(譬如 WIFI、蓝牙、 ZigBee、 4G/5G/GPRS 等), PC 机通常使用有线网络,而手机等移动设备 ...
IIO驱动
IIO介绍IIO 全称是 Industrial I/O,翻译过来就是工业 I/O,大家不要看到“工业”两个字就觉得 IIO是只用于工业领域的。大家一般在搜索 IIO 子系统的时候,会发现大多数讲的都是 ADC,这是因为 IIO 就是为 ADC 类传感器准备的,当然了 DAC 也是可以的。
1、 iio_dev 结构体IIO 子系统使用结构体 iio_dev 来描述一个具体 IIO 设备,此设备结构体定义在include/linux/iio/iio.h 文件中,
1234567891011121314151617181920212223242526272829303132333435363738474 struct iio_dev {475 int id;476477 int modes; //为设备支持模式 /*INDIO_DIRECT_MODE 提供 sysfs 接口。 INDIO_BUFFER_TRIGGERED 支持硬件缓冲触发。 INDIO_BUFFER_SOFTWARE 支持软件缓冲触发。 INDIO_BUFF ...
网络驱动
网络驱动硬件嵌入式网络硬件分为两部分: MAC 和 PHY,大家都是通过看数据手册来判断一款 SOC 是否支持网络,如果一款芯片数据手册说自己支持网络,一般都是说的这款 SOC 内置 MAC, MAC 类似 I2C 控制器、 SPI 控制器一样的外设。但是光有 MAC还不能直接驱动网络,还需要另外一个芯片: PHY,因此对于内置 MAC 的 SOC,其外部必须搭配一个 PHY 芯片。但是有些 SOC 内部没有 MAC,那也就没法搭配 PHY 芯片了,这些内部没有网络 MAC 的芯片如何上网呢?这里就要牵扯出常见的两个嵌入式网络硬件方案了
1、 SOC 内部没有网络 MAC 外设我们一般说某个 SOC 不支持网络,说的就是它没有网络 MAC。那么这个芯片就不能上网了吗?显然不是的,既然没有内部 MAC,那么可以找个外置的 MAC 芯片啊,不过一般这种外置的网络芯片都是 MAC+PHY 一体的。
这种方案的优点就是让不支持网络的 SOC 能够另辟蹊径,实现网络功能,但是缺点就是网络效率不高,因为一般芯片内置的 MAC 会有网络加速引擎,比如网络专用 DMA,网络处理效率会很高。而且此类 ...
块设备驱动开发
块设备介绍块设备是针对存储设备的,比如 SD 卡、 EMMC、 NAND Flash、 Nor Flash、 SPI Flash、机械硬盘、固态硬盘等。因此块设备驱动其实就是这些存储设备驱动,块设备驱动相比字符设备驱动的主要区别如下:①、块设备只能以块为单位进行读写访问,块是 linux 虚拟文件系统(VFS)基本的数据传输单位。字符设备是以字节为单位进行数据传输的,不需要缓冲。②、块设备在结构上是可以进行随机访问的,对于这些设备的读写都是按块进行的,块设备使用缓冲区来暂时存放数据,等到条件成熟以后再一次性将缓冲区中的数据写入块设备中。
linux 内 核 使 用 block_device 表 示 块 设 备 , block_device 为 一 个 结 构 体 , 定 义 在include/linux/fs.h 文件中,结构体内容如下:
1234567891011121314151617181920212223242526272829303132333435361 struct block_device {2 dev_t bd_dev; /* not ...
can通信协议
CAN通信协议CAN 的特点主要有一下几点:①、多主控制②、系统的柔软性③、通信速度快,距离远④、具有错误检测、错误通知和错误恢复功能⑤、故障封闭功能⑥、连接节点多
CAN 电气属性CAN 总线使用两根线来连接各个单元:CAN_H 和 CAN_L, CAN 控制器通过判断这两根线上的电位差来得到总线电平, CAN 总线电平分为显性电平和隐性电平两种。显性电平表示逻辑“0”,此时 CAN_H 电平比 CAN_L 高,分别为 3.5V 和 1.5V,电位差为 2V。隐形电平表示逻辑“1”,此时 CAN_H 和 CAN_L 电压都为 2.5V 左右,电位差为 0V。 CAN 总线就通过显性和隐形电平的变化来将具体的数据发送出去 。
CAN 总线上没有节点传输数据的时候一直处于隐性状态,也就是说总线空闲状态的时候一直处于隐性。
CAN协议帧CAN 协议提供了 5 种帧格式来传输数据:数据帧、遥控帧、错误帧、过载帧和帧间隔。其中数据帧和遥控帧有标准格式和扩展格式两种,标准格式有 11 位标识符(ID),扩展格式有 29 个标识符(ID)。
帧类型
帧用途
数据帧
用于 CAN ...
linux开发板安装第三方库
第三方库的安装配置串口(minicom和ncurse)ncurses (new curses)库是System V Release 4.0及curses更高版本中的免费软件仿真库。它使用terminfo格式,支持pads和color ,多种高亮显示,多形式字符和功能键映射,该库很容易移植到任何符合ANSI/ posix的类unix系统中运行。
下载地址Ncurses - Free Software
具体编译构建步骤如下:
1、构建配置1./configure --prefix=/home/moss/linux/tool/ncurse --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf --with-shared --without-profile --disable-stripping --without-progs --with-manpages --without-tests
configure :配置脚本。(在命令行终端下运行)
–prefix: 用于指定编译结果的保存目录。
–host: 用于指定编译器 ...
音频驱动开发
音频解码处理器接收音频需要将声音通过ADC采集,将模拟信号转换成为数字信号,相反播放声音就需要将数字信号转换成为模拟信号使用DAC芯片。音频编解码芯片,英文名字就是 Audio CODEC 。
既然音频 CODEC 的本质是 ADC 和 DAC,那么采样率和采样位数就是衡量一款音频CODEC 最重要的指标。比如常见音频采样率有 8K、 44.1K、 48K、 192K 甚至 384K 和 768K,采样位数常见的有 8 位、 16 位、 24 位、 32 位。采样率和采样位数越高,那么音频 CODEC 越能真实的还原声音,也就是大家说的 HIFI。
模拟量转成数字量过程,一般可以分为三个过程,分别为采样、量化、编码。
①、此部分是 WM8960 提供的输入接口,作为立体声音频输入源,一共提供了三路,分别为 LINPUT1/RINPUT1、 LINPUT2/RINPUT2、 LINPUT3/RINPUT3。麦克风或线路输入就连接到此接口上。②、此部分是 WM8960 的输出接口,比如输出给耳机或喇叭, SPK_LP/SPK_LN 用于连接左声 ...
驱动程序编译进入内核(在内核编辑界面显示)
通常都是将驱动源码编译为.ok文件,然后通过insmod 或者modprobe加载进系统中,而在脱离网络的设备中就需要将驱动编译进入内核。
已知驱动类型操作步骤:
查看自己编写驱动的所属类型,例如编写一个led的驱动,那么寻找内核drivers目录中的led驱动目录
首先打开编写Kconfig文件
1tristate "内容"
这行的内容是显示在menuconfig的目录中,相当于这个驱动的说明。
之后修改leds这个目录的Makefile
1obj-$(CONFIG_GPIOLED) += gpioled.o
$()的内容是CONFIG_后面加上Kconfig里添加的内容,+=后面加上文件.o的名字
最后在内核中编译make menuconfig,可以在设备驱动的led驱动里面看到自己写的驱动。
未知驱动类型操作步骤:
在drivers的目录下自行创建一个目录
1mkdir nxpops
在此目录下创建Kconfig文件
12cd nxpopsvi Kconfig
123456789menuconfig NXPOPS bool ...
触摸屏驱动
触屏需要的知识点首先触摸屏的驱动,也是使用之前使用input的知识点。
通过注册函数注册到内核,
触控屏幕,电容屏幕是控制 IC ,所以要使用到IIC的驱动,因为触摸 IC 提供了中断信号引脚(INT),可以通过中断来获取触摸信息 ,上报屏幕坐标等信息需要使用input的系统上报。单点触摸和多点触摸触摸屏分为多点触摸屏幕和单点触摸屏幕,单点触摸设备只支持单点触摸,一个同步事件完成数据只包含一个触摸点信息,单点触摸设备以ABS_XXX事件承载、上报触摸点的信息,有的设备还支持其他事件例如压力,z轴坐标等数据。多点电容触摸的(Multi-touch,简称 MT), MT 协议被分为两种类型, TypeA 和 TypeB,这两种类型的区别如下:Type A:适用于触摸点不能被区分或者追踪,此类型的设备上报原始数据(此类型在实际使用中非常少! )。Type B:适用于有硬件追踪并能区分触摸点的触摸设备,此类型设备通过 slot 更新某一个触摸点的信息, FT5426 就属于此类型,一般的多点电容触摸屏 IC 都有此能力。
触摸点的信息通过一系列的 ABS_MT 事件(有的资料也叫消息)上报 ...
串口驱动
串口驱动程序层次结构
下层为串口驱动层,它直接与硬件相接触,需要填充一个 struct uart_ops 的结构体。上层为tty层,包括tty核心层及线路规程,它们各自都有一个 ops 结构体,用户空间可以通过tty注册的字符设备节点来访问串口设备。涉及到了4个 ops 结构体,层层进行跳转。
uart_driver包含了串口设备名、串口驱动名、主次设备号、串口控制台(可选)等信息
12345678910111213struct uart_driver{ struct module *owner; //拥有该uart_driver的模块,一般为THIS_MODULE constchar *driver_name; // 串口驱动名,串口设备文件名以驱动名为基础 constchar *dev_name; // 串口设备名 int major; //主设备号 int minor; //次设备号 int nr; // 该uart_driver支持的串口个数(最大) struct console *cons;// 其对应的console. ...