自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 问答 (1)
  • 收藏
  • 关注

原创 学习笔记(04):4.9.链表&状态机与多线程-4.9.6.单链表的算法之遍历节点

本课程主要目标是让大家彻底全面的掌握链表这一数据结构。因为链表在内核驱动开发中属于很重要的基础技术,因此用十几节课来彻底深入讲解和实践。...

2020-04-06 21:56:39 129

原创 学习笔记(03):4.9.链表&状态机与多线程-4.9.5.从链表头部插入新节点

本课程主要目标是让大家彻底全面的掌握链表这一数据结构。因为链表在内核驱动开发中属于很重要的基础技术,因此用十几节课来彻底深入讲解和实践。...

2020-04-06 21:45:21 147

原创 学习笔记(02):4.9.链表&状态机与多线程-4.9.4.单链表的算法之插入节点续

本课程主要目标是让大家彻底全面的掌握链表这一数据结构。因为链表在内核驱动开发中属于很重要的基础技术,因此用十几节课来彻底深入讲解和实践。...

2020-04-06 21:27:22 158

原创 学习笔记(01):4.9.链表&状态机与多线程-4.9.3.单链表的算法之插入节点

本课程主要目标是让大家彻底全面的掌握链表这一数据结构。因为链表在内核驱动开发中属于很重要的基础技术,因此用十几节课来彻底深入讲解和实践。...

2020-04-06 20:59:26 132

原创 C++ virtual 虚函数列表 多态 静态绑定 动态绑定

C++ virtual的作用,基类virtual函数,将继承类的重载函数绑定为基类的函数这里是靠基类的虚函数列表,将继承类的重载函数的地址指向到表里,而基类中只存放虚函数列表的首地址,通过首地址偏移找到继承类的重载函数,这是动态绑定,动态绑定发生在运行的时候无virtual是静态绑定,静态绑定是在编译的时候确定的,就是基类调用成员函数,就是基类的函数,继承类的重载函数调用的就是继承类的重载函数...

2019-09-25 22:11:17 160

原创 Linux--gcc,库,环境变量以及部分命令

常用命令:    gcc的参数        -c        -o filename,指定输出文件的名字        -Wall,显示全部的警告        -std=c99         -S,产生汇编代码        -E,只做预处理        -On,优化,n是1,2,3        -i filename,指定要包含的叫filename头文件     ...

2018-09-29 17:32:31 857

原创 linux中进程僵死状态以及exit,wait系统调用

僵死状态就是子进程在调用exit后的一段时间里出现的状态,几乎不再内存,也不运行代码,只是在进程列表中存在,这样的状态的弊端就是由于进程列表是有上限的这种僵死状态的进程存在太多就会导致列表不够用从而引发问题父进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返...

2018-09-27 15:31:04 801

原创 shell脚本比较字符串大小

可以使用bc还可以使用awk使用bc命令:        cmp=`echo "$str1 > $str2" | bc`      #bc就是计算$str1与$str2比较结果大于的时候返回1        if [ $cmp -eq 1 ];then        str2=$str1                                       #取出最大值 ...

2018-09-25 11:27:58 8089

原创 连接脚本

第一段程序:helloword.c#define UFCON0 ((volatile unsigned int *)(0x50000020))void helloword(void){    const char* p = "helloword\n";    while(*p){        *UFCON0 = *p++;    };    while(1);}UFCON0代...

2018-09-11 14:29:55 370

原创 防止DHCP饥饿攻击

DHCP饥饿攻击,伪造合法的MAC地址,不断地向DHCP服务器发出DHCP Request包,最后耗尽服务器的可用IP,于是原有的这台DHCP服务器便不能够给客户端分配IP了,此时不法分子再伪造一台DHCP服务器,给客户端分配IP,将客户端的默认网关和DNS都设置成自己的机器,于是便可以对客户端进行中间人攻击。预防方法:在交换机上通过传统的DHCPSnooping技术就可以来防范DHCP假冒攻...

2018-09-06 17:09:05 5314 2

原创 C语言--局部变量作为指针返回值的问题

代码:#include <stdio.h>#include <stdlib.h>int* getStu(int x, int y){        int i = x+y;        return &i;}int main(){        int x = 2, y = 3;        int *s = getStu(x, y);...

2018-08-10 10:24:49 2181 4

原创 C语言--case语句加{}

switch是我们做条件选择的时候经常用到的一个语句,但是最近项目写的代码遇到了问题,代码如下#include<iostream>using namespace std;int main(){        int i;        cout<<"please input the value of  i ---(0-9)"<<endl;    ...

2018-08-08 13:00:35 5720 2

原创 ARM学习笔记--day11

ARM异常系(中断)异常是有CPU处理器来控制的,外设是有外设控制器来控制的,然后外设控制器与CPU相连接七种异常:    1.复位异常:        触发原因:①关机-》开机会产生异常                  ②reset按键会产生异常    2.未定义指令异常:        触发原因:指令没有定义的时候触发的异常,包括关键字不对,格式不正确,或者是将代码下载到错误地...

2018-08-01 13:45:13 199

原创 ARM学习笔记--day10

1.理解ARM启动原理    除了通用原理还有各个厂商的独特的启动方式    ARM里边的程序永远冲0地址开始运行,这个内存0地址是ARM的0~4G的内存地址空间的0地址    ARM是32位最大寻址能力就是4个G,就决定了内存地址空间是4个G,这个空间是CPU的访问能力,CPU从0地址取指译码执行,储存器(内存DRAM)是实际上地址范围是0x20008000~40000000是512M的大...

2018-08-01 13:44:47 274

原创 ARM学习笔记--day09

存储设备:处理器中必须额外接存储设备    RAM(内存,掉电数据丢失):        原理分类:            1.SRAM                静态RAM,线性存储的结构,不会刷数据,每增加个数据,就会在末尾处加一块内存,这样存取数据会快一些,同时也导致SRAM的面积大一些                小的SRAM集成到CPU上(小的4~8k,大的几十k) ...

2018-08-01 13:44:11 311

原创 ARM学习笔记--day08

uart    串口通信    学习一般步骤:        1.弄懂原理            a.通信格式,数据                串口控制器与处理器相连接,然后控制器与数据线相连接,有9根线,一根rx,一根tx                怎么保证数据没有错,两点决定:                    a.通信速率,必须保证接收/发送双方的发送速率是一致的(...

2018-08-01 13:43:05 212

原创 ARM学习笔记--day07

指令限制:    mov r1,#0xe0200080 @这条指令是不可以的,因为mov受限制    指令限制,由于指令长度是32位等宽,造成了限制,例如:mov r0,#0xffffffff,这条指令就是32位,这32位中包含存储助记符,还有条件,S标志等也需要32位内存,最后留给立即数的内存,就不到32位了,所以使用gcc编译是无法编译的,所以例子中的指令是错误指令,凡是指令里边里边出现立...

2018-07-25 11:43:13 223

原创 ARM学习笔记(未整理版)--day06

芯片手册看的方法找到对应管脚后,要找到对应的寄存器,这个就是外设的寄存器,每个外设都有很多寄存器通过某一个寄存器来控制相应的管脚从而控制相对应的硬件现在要明确以下三点:1.LED的GPC1_3的寄存器是哪个寄存器;2.向寄存器写什么数代表是什么样的操作;3.怎么写数据(向对应的内存地址写数据);GPIO的操作是分组的,一组寄存器控制一个管脚GPC1寄存器组是有6个寄存器GPC1C...

2018-07-25 11:42:22 116

原创 ARM学习笔记--day05

裸板编译运行:arm-linux-gcc -c hello.c生成.o文件arm-linux-gcc hello.o -o hello是编译不过的,需要加两个参数参数1:-nostartfiles,参数2:-nostdlib,动态库最后arm-linux-gcc -nostartfiles -nostdlib hello.o -o hello就可以编译通过这两个参数时纯裸机开发的时候才...

2018-07-25 11:32:09 156

原创 ARM学习笔记--day04

开发板先要移植u-boot先把u-boot烧写到flash中下载是通过USB或者网线下载tftp协议(CS结构的PC机有软件,开发板是有uboot)uboot支持tftp协议(传输文件的网络协议)开发板启动的时候需要从PC机下载文件,这就靠tftp协议PC机上是有软件的,uboot烧写到内存中,需要uboot命令print命令:打印出Uboot的环境变量,关心三个环境变量,ipaddr代...

2018-07-25 11:31:27 116

原创 ARM学习笔记--day03

比较指令无条件:助记符(4种):cmp:实际上做的是减得操作,可以比较出负数,溢出cmn:反比较,是做加法单寄存器加载指令:助记符:ldr&str寄存器和内存之间数据传递,必须要有寄存器,和内存(表示内存的方法3种:①[Rn,+/-shifter_operand]表示把Rn,+/-shifter_operand这个内存地址的值读到寄存器,②[Rn,+/-shifter_oper...

2018-07-25 11:30:32 195

原创 ARM学习笔记--day02

SPSR与CPSR是一样的只不过是特殊模式下独自的"CPSR",与通用寄存器一样ARMv4架构的CPSR寄存器前4位(高4位):是运算产生的状态,N(负或小于状态),Z(0状态),C(进位或借位拓展),V(溢出标志)后8位(低8位):    后5位是模式位,32中情况,可以区分32种模式,而ARM中只有7种模式,为了以后拓展用的,根据这几位来确定此时处于什么模式下    后5位模式对应表...

2018-07-25 11:29:40 200

原创 ARM学习笔记(未整理版)--day01

ARM裸机开发主板-》芯片{主芯片(处理器ARM,V7架构的),存储芯片.....}ARM内核(决定运算)与外设(不同公司是不同的)分为内核编程的方法(ARM核心编程,按照ARM公司的标准来进行编程,内核编程手册)    核心编程的体系结构,指令集,寄存器,汇编语言,异常处理按照架构来分:按照内核来分另一方面根据芯片手册来对外设编程    接口技术首先说核心编程:用户模式与...

2018-07-17 13:28:36 156

原创 驱动初识与文件系统的理解

驱动框架:驱动程序分为两大类:字符设备和块设备字符设备:每次传输数据时将字符作为最基本单位的设备,如键盘和声卡等。他们通常不支持随机存取数据,因此对字符设备的处理非常直观简单,字符设备在实现时也大多不需要缓存,系统直接从设备读取/写入每一个字符块设备:与字符设备相对的,以批量方式进行数据传输的一类设备,如硬盘,CD-ROM等。块设备支持随存取和寻址并使用缓存,这几点与字符设备相对的,操作系统会为块...

2018-07-13 15:19:39 799

原创 ARM中断处理2

前言:    承接“ARM系列中断处理”,在ARM系列中断处理中介绍了ARM系列的中断的共通流程,这篇文章主要介绍每款芯片独自的中断处理,这里以s3c2410为例子正文:   中断本身分为主中断和子中断;    主中断:占用一条中断信号线的中断,如时钟中断,这个中断单独占用一条CPU中断信号线,即只要CPU检测到该中断线有信号,就必然说明时钟产生了一个中断请求,他们之间的关系是一对一的    子中...

2018-07-12 08:54:00 151

原创 ARM系列中断处理

ARM体系结构中断处理分为两个阶段:    1.体系统一处理:同一系列芯片的中断处理方法一致    2.体系独立处理:不同款芯片的处理方式完全不同ARM9系列体系统一处理过程:a.保存当前运算环境,比如标志位的值,返回地址,等等b.模式的切换c.程序跳转到一个固定的地址去执行异常种类:1.芯片复位SVC:当芯片发生时产生2.未定义指令UND:指令不能被芯片识别时产生3.软中断SVC:软件调用swi...

2018-07-11 17:18:34 1005

原创 C语言--结构体指针需要malloc

如果定义一个结构体类型的普通变量,可以不malloc动态申请内存,CPU会为这个结构体变量分配内存    如果定义的是一个结构体的指针,CPU会为这个指针开辟内存,但是此时这个大小是4(如果是32位的CPU的话),所以这个空间不足以存储结构体的数据成员,就会引发错误,此时必须要malloc申请一个,结构体类型大小的动态内存,用于数据成员存储使用拓展一下,malloc是动态申请,调用后会根据虚拟映射...

2018-07-06 17:42:36 8399

原创 linux文件系统基本组成

典型的Linux文件系统构成:    bootfs与rootfsbootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引导加载kernel,当kernel被加载到内存中后bootfs就被umountlerootfs(root file system)包含的就是典型linux中的/dev,/proc./bin,/etc等标准目录和文件 ...

2018-07-03 17:42:39 1724

原创 Linux文件系统

    “尽管内核是Linux内核,但文件缺失用户与操作系统交互所采用的主要工具”,这就阐述了“文件系统”的作用,如果只有Linux,没有文件系统,那么整个系统是没有意义的    在Linux中普通文件和目录文件保存在称为块物理设备的磁盘或者磁带上。一套Linux系统支持若干物理盘,每个物理盘可以定义一个或者多个文件系统。(类似于微机的磁盘分区)。每个文件系统由逻辑块的序列组成,一个逻辑盘空间一般...

2018-07-03 12:00:00 255

原创 TCP的连接三次握手与断开的四次握手

对照wireshark,可以看到TCP的连接三次握手与断开的四次握手在wireshark工具中可以当看到SYN标志,可以进去,看一下是否被置成1,如果为1,说明,客户要求与服务器建立连接服务器会回复一个ACK置1,SYNC置1的应答给客户端然后客户端再恢复一个ACK确认包之后开始数据交互,每一包会把PSH位置1,同时携带ACK,携带ACK是为了确认是在一次连接中的数据传输关闭由于TCP连接是双向连...

2018-06-29 17:46:47 97

原创 USB工作过程例子--比较通俗

主机比作一家公司,你就是USB设备,要进入公司首先要面试(枚举),你到了面试现场(第一次插入设备),面试官首先了解你的外表,性别(都是你的特点)(设备描述符),然后给你一个号(设置地址),以后就开始按号叫人,当你被叫到就开始问你的专业知识,性格等等(细节)(配置描述符),如果你比较合适(通过枚举)你就会被录取了,并注册一个你的信息到公司(驱动安装,并且写入注册表)。等你下次来公司,只要把工号(PI...

2018-06-28 08:37:47 864

原创 USB枚举过程

在枚举之前,是设备插入,具体过程如下:    不论此时设备是否插入USB端口(USB HUB),主机都会轮回查询各个USB端口,主机检测到D+与D-之间有电压差,就认为有新的设备接入,主机等待100ms后发出复位请求。设备接收到复位请求后将产生一个外部中断信号枚举过程:    主机这时候只是知道有新的设备插入了,但是不知道插进来的是什么东西,枚举过程就是让主机来认识插入的设备的,主机会询问它是什么...

2018-06-28 08:31:11 644

转载 usb驱动详解资料

参看:https://www.cnblogs.com/myblesh/category/565997.html

2018-06-22 17:26:16 799

原创 Linux下core文件及使用

core文件的作用:    当程序崩溃时,内核有可能把该程序当前内存映射到core文件中,方便程序员找到程序出现问题的地方,最常出现的,几乎所有C程序员都出现过的“段错误”了。也是最难查出问题原因的一个错误core文件是什么:    核心文件(core file),也称为核心转存(core dump),是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状态的其他信息写出...

2018-06-19 14:22:04 19618

原创 git使用

使用git提交比较大的文件的时候可能会出现这个错误error: RPC failed; result=22, HTTP code = 411fatal: The remote end hung up unexpectedlyfatal: The remote end hung up unexpectedlyEverything up-to-date这样的话首先改一下git的传输字节限制git co...

2018-06-17 19:08:07 94

原创 虚拟机问题

背景介绍:    之前虚拟机都是可以正常使用,今天突然开机时黑画面    VMware 操作系统是ubuntu问题详细:    开机黑屏,然后ubuntu挂起后,通过小窗口,可以看到系统已经启动解决办法:方法1:    1. windows,管理员身份启动cmd    2. 输入netsh winsock reset,回车弹出是否允许操作窗口    3. 选择允许一次    4. 重启计算机方法2...

2018-06-11 13:01:50 524

原创 ubuntu下安装skyeye方法

一. 前言  Skyeye是一个嵌入式开发板模拟软件,支持多种指令集、多种CPU。本文介绍Skyeye-1.3.5工具的安装。基于以下环境:  1. Ubuntu14.04 LTS (32位), 运行于VMWare虚拟机中;  2. Skyeye-1.3.5; 二、 准备  1. 下载Skyeye-1.3.5源代码  下载地址:https://sourceforge.net/projects/sk...

2018-06-09 18:23:19 988

原创 SSL握手过程

第一阶段:    客户端向服务器端发送TCP请求,建立起TCP连接后,客户端向服务器发送client hello消息,传送客户端支持的最高SSL协议的版本号、随机数、加密算法列表,以及其他所需要的信息。第二阶段:    服务器向客户端发送包含其证书的Certificate消息。证书中所携带服务器的公钥,用于加密后面消息中预主秘钥                证书内容:              ...

2018-06-07 14:39:58 679

原创 ARM中跳转的三种方法

使用跳转指令b,bl,bx等    使用这一系列指令的优点是执行速度快,只需要一个指令周期即可完成跳转。但该系列指令有一个明显的缺点,那就是他们都不能实现任意地址的跳转。但该系列指令有一个明显的缺点,那就是他们都不能实现对任意地址的跳转。比如程序在地址0x0处运行了跳转指令,但是该指令不能跳转到0xc0000000,原因是ARM指令等宽特性决定。ARM指令集是32位等长的,所以,所有指令(包括指令...

2018-06-06 08:52:55 7935

原创 ARM的规则ATPCS和AAPCS

基本概念:ATPCS(ARM-Thumb Procedure Call Standard)        规定了一些子程序间调用的基本规则,这些规则包括子程序调用过程中寄存器的使用规则,数据栈的使用规则,参数的传递规则。有了这些规则之后,单独编译的C语言程序就可以和汇编程序互相调用。        使用ADS的C语言编译器编译的C语言子程序满足用户指定的ATPCS类型。而对于汇编语言来说,则需要用...

2018-06-05 15:52:50 1552

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除