- 博客(10)
- 收藏
- 关注
原创 IP数据报二进制反码求和算法
计算数据报的IP校验和,首先把校验和字段(16bit)置为0.然后,对首部(20字节)中每个16bit进行二进制反码求和,结果存在校验和字段中.当收到一份IP数据报后,同样对首部中每个16bit进行二进制反码求和.接收方在计算过程中包含发送方存在首部中的校验和,如果首部传输正确,那么计算的结果应该全为1(即0xffff).测试例程如下图#include <stdio.h>int ...
2019-02-19 16:01:56
2123
原创 详解Linux调用驱动open函数过程
/先叙述一下大概流程,再补充流程细节*Linux 打开一个文件,需要两个步骤(1) 找到文件(2) 打开文件C库调用open函数的系统入口时sys_open函数.asmlinkage long sys_open(const char __user *filename, int flags, int mode){ long ret; // 判断是否为32位系统 if (for...
2019-01-25 10:49:04
6263
原创 Linux中probe何时被调用
// 以PCI总线驱动模型, XDMA设备源码, 2.6.26内核源码为例// 网上通用解释如下: static const struct pci_device_id cpi_ids[] = { {PCI_DEVICE(0x10ee, 0x903f), }, {PCI_DEVICE(0x10ee, 0x9038), }, …… {0,}, };...
2019-01-21 16:58:41
1290
原创 PCI/PCIe硬件相关知识
Linux下PCI驱动实现(硬件篇)首先要说明一点,由于作者对内核也不是完全熟悉,所以做内核编程时喜欢猜测,即根据对内核的了解去猜测内核会怎么做,文章有部分内核行为是作者自己猜测,如有错误,欢迎批评指正。 1.PCI历史 PCI协议经历 ISA (Industry Standard Architecture) MCA (Micro Channel Architecture) EIS...
2018-07-24 16:40:28
3815
原创 Linux驱动中的进程同步
/**原子变量操作是Linux的一种简单同步机制,是一种在操作过程中不会被打断的操作.***//****其API和原子类型定义在include/asm/atomic.h文件中,使用汇编实现****优点是编写简单;缺点是功能太简单,只能做计数操作,保护的东西太少,***//*原子变量类型为atomic_t,atomic_t实际上是一个int类型的值,但由于处理器限制,只能表示24位数的范...
2018-07-18 16:59:38
584
原创 container_of 宏机制
以task_struct 为例来看/*******task_struct 进程描述符**********************/struct task_struct { volatile long state; void *stack; atomic_t usage; unsigned int flags; unsigned int...
2018-07-18 16:30:41
249
原创 UCOSIII-任务就绪表
UCOSIII中任务的优先级UCOSIII中将已经就绪的任务放到就绪表里,任务就绪表有两部分:优先级位映射表OSPrioTBL[]和就绪任务列表OSRdyList[]。 当一个任务就绪之后,就会将该任务优先级对应的数值在优先级位映射表中置1,例如,如果只有一个任务的优先级为14的任务就绪,就会将OSPrioTBL[0]的第13位置1,变成0000 0000 0000 0100 0000 0000
2017-03-23 19:26:28
2090
原创 使用UCOSIII创建一个任务
创建一个任务 //任务优先级 #define START_TASK_PRIO 3 //任务堆栈大小 #define START_TASK_SIZE 128 //任务控制块 OS_TCB StartTaskTcb //任务堆栈 CPU_STK START_TASK_STK[START_TASK_SIZE] //任务函数 vo
2017-03-23 18:25:24
2526
原创 Linux—GPIO
查看原理图,我的JZ2440开发板连接图是 LED1: nLED_1 –> GPF4 LED2: nLED_2 –> GPF5 LED3: nLED_4 –> GPF6S1: EINT0–> GPF0 S2: EINT2 –> GPF2 S3: EINT11 –> GPG3 2. 查看S3C2440手册 控制GPF口的寄存器如下:GPFCOND寄存器控制I/
2017-03-16 10:40:40
430
原创 Linux—S3C2440烧录裸板程序
安装VMware虚拟机,新建一个Ubuntu的Linux系统,选用9.10版本。安装SecureCRT远程登录软件。该软件可以通过IP地址登陆Linux系统。安装CuteFTP软件,方便windows与Linux进行文件传输。安装J-Flash软件,安装软件过程中会附带安装JLINK驱动。安装DNW软件,使用DNW烧录裸板程序。 相关文件下载地址: Vmware链接:http://pan
2017-03-15 15:38:42
2121
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人