自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (4)
  • 收藏
  • 关注

原创 全新Linux教程-驱动大全-PCI和PCIe子系统-P6-PCIe路由方式

和前面讲的类似,就是通过桥的地址范围进行过滤,不管来自上层的地址还是来自endpoint的地址,桥都会进行处理转发。主要是TLP的头部。主设备要给EndPoint的内存写数据,它发出"内存写报文",不需要对方回应。主设备要给EndPoint的IO写数据,它发出"IO写报文",需要对方回应。主设备要读EndPoint的内存数据,它发出"内存读报文",需要对方回应。主设备要读EndPoint的IO数据,它发出"IO读报文",需要对方回应。PCIe设备(EndPoint)被配置后,它记录有分配给它的基地址。

2024-04-20 15:55:11 598

原创 全新Linux教程-驱动大全-PCI和PCIe子系统-P4从软件的角度看pcie硬件结构

注释:了解pcie的硬件接口,lanes,link,串行,并行,包结构。

2024-04-20 12:42:07 513

原创 全新Linux教程-驱动大全-PCI和PCIe子系统-P3-PCI设备的访问方法-桥设备

本节主要讲了如何去配置桥设备和桥之后的设备。上节已经讲到可以直接通过不同引脚访问直连的PCIe Agent设备。①IDSEL ②C/BE ③AD[31:0]访问funciotn和寄存器。

2024-04-20 12:24:59 271

原创 全新Linux教程-驱动大全-PCI和PCIe子系统-P2-PCI设备的访问方法-非桥设备

主要讲PCI设备的硬件访问方法。

2024-04-20 12:17:43 595

原创 全新Linux教程-驱动大全-PCI和PCIe子系统-P1-从软件角度看PCI和PCIE

①使用差分信号串行接口。②PCI和pcie对于CPU来说是兼容的。参考:01_pcie接口引脚电路示例_AX99100.pdf`

2024-04-20 11:46:18 527

原创 全新Linux教程-驱动大全-PCI和PCIe子系统-P5-PCIe设备的配置过程

2. 从Bus 0开始扫描(发出配置0的读,读到A的配置寄存器):先尝试读到BDF(0,0,0)设备的Vendor ID,如果不成功表示没有这个设备,就尝试下一个设备BDF(0,1,0)。RC传过来的地址,会经过每个P2P的判断,判断该地址在不在P2P处理的范围之内(图中,假设了每个P2P的地址范围分别是A-B,C-D,E-F)。但是,由于设备号是在硬件上就写死了的,例如RC后pcie桥的所有p2p桥,会从做到右一次进行编号0,1,2(因此在RC这一层也就是bus0这层,可以根据设备号来选择哪个设备)。

2024-04-20 11:19:04 890

原创 win10网卡“该设备无法启动(代码10)”

微星电脑突然出现网卡无法启动,后来尝试了网上的各种方法没解决(网卡驱动卸载重装,升级驱动,释放静电等待)。然后用下面的办法才解决的。(1)win+x 选择windoes shell 管理员。

2023-06-23 11:13:05 2025 3

原创 第二季--上学期--专题8 不用内存怎么行--01从内部看内存

知识点1、内存分类1.1 sram1.2 dram 1.2.1 sdram 1.2.2 ddr 1.2.3 ddr22、内存内部结构2.1 表结构2.2 L-Bank2.3 寻址信息 2.3.1 L-BANK选择信号 2.3.2 行地址 2.3.3 列地址sram:它是一种具有静止存取功能的内存,不需要定期刷新电路就能保存它内部的存储的数据。存储速度快,但是功耗大,成本高,常用作存储容量不高,但是存储速度快的场合,例如steppi...

2022-04-30 22:48:55 263

原创 第二季--上学期--专题10 C语言环境初始化--05 C与汇编混合编程

知识点:1、汇编调用C函数2、C函数调用汇编函数3、C内嵌汇编1、为什么需要混合编程(1)执行效率(2)能够直接控制寄存器2、汇编调用C函数ldr pc, =gboot_main 在汇编脚本中直接改变pc指针即可3、C函数调用汇编函数.global _start.global light_ledint gboot_main(){ light_led();直接调用汇编脚本中的标识即可,但是同时需要light_led申明全局 return 0; }...

2022-04-30 18:34:37 1189

原创 第二季--上学期--专题9 代码搬移sram->sdram

1、arm启动流程回顾2440(1)从nand flash中的前4KB拷贝到sram(垫脚石)中进行运行。(2)然后pc指针指向0地址,执行垫脚石的第一条指令;(3)接着运行这4KB的指令,这4kb的内容需要完成必要的初始化工作:①内存sdram初始化好,nand flash初始化好;②再把整个nand flah上的程序拷贝到内存。③剩下的代码就在内存中运行了。210开发板注意210和2440有一些区别,多出来一个srom2、代码移植(1)确定起点(2)相

2022-04-30 18:33:58 385

原创 第二季--上学期--专题10 C语言环境初始化--03跳转C大门

1、采用什么方式跳跃?--跳转到C代码相对跳转: B BL绝对跳转:pc =xxxx2、检验是否跃成功?sram跳转到ram直接跳转:直接将需要跳转的地址赋值给pc指针相对跳转:由于逻辑程序是通过sram中拷贝到ram中的,所以sram中也有main函数ldr pc, =gboot_mainMakefileall: start.o main.o arm-linux-ld -Tgboot.lds -o gboot.elf $^ arm-linux-objc...

2022-04-30 10:45:04 786

原创 第二季--上学期--专题10 C语言环境初始化--02bss段初始化

1、bss段bss段为什么要清零?bss段的起始地址和结束地址是如何确定的?在boot裸板开发的bss段清零工作和应用程序的bss段清零工作有什么区别?初始化的全局:数据段局部:栈malloc:堆未初始化全局:bss段clean_bss: ldr r0, =bss_start ldr r1, =bss_end cmp r0, r1 moveq pc, lrclean_loop: mov r2, #0 str r2, [r0]...

2022-04-30 10:19:12 281

原创 第二季--上学期--专题10 C语言环境初始化--01栈初始化

1、参考链接ARM——栈 - dongry - 博客园【精华】程序员的自我修养视频教程_哔哩哔哩_bilibili2、栈的初始化1、概念解析:栈桢---sp栈指针 fp栈基址栈:栈是一种具有后进先出的数据组织方式,也就是说后放进去的数据后面取出来(也可以是数据结构体对象)。栈底是第一个进栈的数据所在的位置,栈顶是最后一个数据所处在的位置。数据组织有:链表、图、树等等。我们把数据的组织实现方式当成黑盒使用即可。pop(stack,&data)push(stack,&

2022-04-29 21:11:21 1444

原创 008 -1 内存映射原理--虚拟内存区域的结构体--系统调用

1、内存映射原理参考文献:深入理解Linux内存子系统 (qq.com)经典|图解Linux内存性能优化核心思想 (qq.com)CPU对外设端口物理地址的编址方式有两种:一种是IO映射方式,另一种是内存映射方式。(1)IO映射方式:CPU是i386架构的情况在i386系列的处理中,内存和外部IO是独立编址,也是独立寻址的。MEM的内存空间是32位可以寻址到4G,IO空间是16位可以寻址到64K。(2)内存映射方式:arm,powerpc在这一类的嵌入式处理器中,IO Port的寻址方式..

2022-04-22 20:15:54 834

原创 007-2虚拟地址空间布局

二、虚拟地址空间布局ARM64处理器不支持64位完全虚拟地址。在ARM64结构的linux内核中,内核虚拟地址和用户虚拟地址都是48位,并没有占用前面的16位。所有进程共享内核虚拟地址:ffff 0 0 0 - ffff ffff ffff ffff。每个进程拥有独立的用户空间:0 0 0 0 -- 0 ffff ffff ffff 。同一个进程底下的线程组共享用户的虚拟地址,内核线程不具备用户态的虚拟地址空间。1、用户虚拟地址的划分进程的用户虚拟空间的起始地址是0, 长度是TASK_S

2022-04-17 15:02:43 845

原创 007-1内存管理架构

一、内存管理架构二、虚拟地址空间布局

2022-04-16 15:38:51 536

原创 C语言可变参数解析与实现

#include <stdio.h>#include <stdarg.h>struct person{ char *name; int age; char score;};struct person1{ char *name; int age; char score;}__attribute__((packed));struct person2{ char *name; int age; char score;}__attribut...

2022-02-25 21:23:18 468

原创 smart210 使用sd卡烧写uboot

1、刚刚拿到210开发板,发现资料只要友善的superboot,这个是他们没有公开的二进制文件,只能用来刷系统。而且只能配合他们的minitools SD-flasher.exe软件来使用。对于学习boot和linux内核来说简直一点用没有。2、于是碰到了一个致命的问题,如何把自己编译的uboot放在sd卡,将sd卡制作启动盘?在网上百度了一大堆,发现方式多种多样,有window专门制作sd卡,还有朱友鹏老师的sd_fusing2.sh sd_fusing.sh等等脚本,最后发现都或多或少有以下问题。

2022-01-03 14:03:47 1048

原创 linux内核链表移植详解

1、介绍linux内核链表重要是针对:普通链表无法管理所有结构体节点串联起来;普通链表利用一种结构只能表示一个对象。加入我只想对某个节点添加某种属性int number;将会需要改变所有节点结构体。struct list_node{int value1;char value2;struct list_node *next;struct list_node *prev;};改成内核链表的方式:struct list_node{struct list_node *n

2022-01-01 14:03:42 758

原创 原理图之协议类UART

2021-10-31 11:23:04 179

原创 硬件原理图之GPIO

1、GPIO和门电路学习什么是输入输出引脚?作为输入引脚2、什么是上拉电阻?什么是下拉电阻??3、查看LED电路图nLED1-4直接接芯片,当它们作为输出引脚的时候,并且赋予低电平时,点灯。反之。分别接芯片的GPB5 6 7 8引脚。继续查看芯片手册IO端口的章节,查看如何配置该引脚作为输出或者输入。按键电路图分析4、中断对于某些芯片来说,GPIO的引脚同时也可以用于中断引脚。...

2021-10-30 19:26:05 482

原创 linux中断驱动程序

1、内核和芯片初始化代码已经将异常或者中断的架构处理了。此时需要用户提供处理函数。也就说用户需要告诉内核当某一个中发生时,处理哪些内容!!需要使用到的注册函数request_irqint request_irq(unsigned int irq, irq_handler_t handler,unsigned long irqflags, const char *devname, void *dev_id){(1)分配一个irqaction结构 action = kmalloc(si...

2021-10-24 23:04:06 2712

原创 Linux内核中断处理机制--初始化

1、Linux内核从start_kernel函数开始进行初始化(1)trap_init主要就是异常的初始化。(2)init_IRQ才是中断的初始化。2、trap_init都干了啥呢?void __init trap_init(void){.... 把向量表拷贝到ffff0000地址memcpy((void *)vectors, __vectors_start, __vectors_end - __vectors_start);.... 把复杂向量表拷贝到ffff0200mem.

2021-10-23 09:42:47 1793

原创 中断处理机制

(1)为什么内核需要中断?(2)硬件实现一个中断需要做什么?注册就是告诉内核的存在;(3)什么是快中断 什么是慢中断?前者不允许发生中断嵌套read属于中断上下文还是进程上下文?中断上下文,进程上下文的区别?因为函数是由进程主动实现的,所以属进程上下文。中断上下文属于硬件引起的。在中断处理函数中,没有所谓的进程的概念。所以不存在直接向用户空间发送消息,也不存在进程的调度,以及进程阻塞。内核中...

2021-10-19 22:35:08 226

原创 原来实现系统调用那么简单

系统调用:执行read系统调用会产生swi指令,把系统调用编号放入r7寄存器当中(1)系统调用入口地址(2)取出系统调用编号放入scno中(3)找到系统调用表 .type sys_call_table, #objectENTRY(sys_call_table)#include "calls.S"系统调用表(4)如何实现新的系统调用①在printk中实现函数体void sys_pk(){ printk("this is a new sys...

2021-10-19 20:11:51 84

原创 程序员的自我修养1-可执行文件和目标文件结构

记录一下在学习编译过程的东西。

2021-10-14 18:56:21 21

原创 Unix环境高级编程--3-文件IO---3.10文件共享

1、内核用于所有IO的数据结构打开文件的背后:fd = open("/tmp/text.c", O_RDWR | O_CREATE, 0777); fd背后关联着3个数据结构,正是这3个数据结构,决定了打开文件的属性,以及多进程之间对同一个文件的影响(也就是文件共享);(1)每个进程在进程表中有一个记录项,记录项中有一个打开文件描述符表,也就是一个矢量,每个描述符占用一个矢量位;与每个文件描述符相关联的是:①文件描述符标志(close_on_exec);②指向一个文件表项的指针(2)内核为所有打

2021-05-04 13:16:18 127

原创 Unix网络编程-进程间通信---6、System IPC---消息队列

1、使用消息队列标识符表示(和普通文件fd相似)2、打开一个消息队列标识符时,内核对应维护一个信息结构体内核给每一个system V IPC维护一个信息结构体:struct ipc_perm{ uid_t uid; gid_t gid; uid_t cuid; gid_t ugid; mode_t mode;//读写权限 ulong_t seq; ket_t ...

2021-05-03 16:47:40 231

原创 Unix网络编程-进程间通信---4、最初的Unix IPC --FIFO

FIFO1、FIFO指先进先出first in first out;考虑到pipe只能用户父子进程之间的进程间通信的机制;FIFO和pipe一样,是一个单向数据流,但是fifo有一个路径名与之相关两,能够让不同进程访问实现通信2、int mkfifo(const char *pathname, mode_t mode)注意:mode的几个宏(1)、mkfifo已经指定O_CREAT | O_EXCL,也就是说要么创建新的fifo,要么返回错误(已经存在)mode;(2)、打开(open)一个

2021-05-03 00:45:16 260

原创 Unix网络编程-进程间通信---4、最初的Unix IPC -- 管道

1、客户端服务器需求2、int pipe(int fd[2])//返回两个文件描述符,fd[0]读,fd[1]写;宏S_IISFIFO用来确定一个文件描述符或者文件是管道还是FIFO;3、半双工通信管道的使用:一对父子进程,由父进程创建一个管道,子进程复制副本;父进程关闭读fd[0],子进程关闭写fd[1];实现了单向父 ----> 子的通信因为父进程创建的管道资源是属于父子进程公共分享的空间,这个资源只在父进程创建了一份;4、如何理解who | sort | lp -----.

2021-05-02 16:12:16 266

原创 Unix网络编程-进程间通信---2、POSIX IPC 3、System IPC 简介比较

一、Posix IPCPosix函数汇总创建、打开、删除、控制、操作 二、System V IPCSYSTEM IPC 和posix 有共同的三种IPC :消息队列、信号量、共享内存1、IPC键---key_t键和ftok函数(1)System V IPC使用key_t值作为他们的名字,通常是一个至少32位的整数;(2)key_t ftok(const char * pathname, int id);(3)函数把pathname导出的信息和id的低8位组合成一个整..

2021-05-02 13:35:53 253

原创 Unix环境高级编程--8-进程控制---8.5函数exit-8.6 函数wait 和waitpid

进程的退出最近在工作中遇到了一个问题,背景是:init进程会创建pc进程,pc进程会创建pro1进程,pro1又会创建pro2,pro3和pro4三个二级进程,但是pro1创建的二级进程起来后将交给pc管理;由于线程之间又相互有依赖的顺序关系;现在需求pro1进程完全杀死之后其他进程才能去杀,起来也是要pro1完全起来才能起其他进程;但是由于pro1初始化多,导致时间比较久,直接连续发送信号给各个进程会有问题;system("kill pro1");system("kill pro2");

2021-05-02 01:10:13 259

原创 C语言结构体

1、结构体的声明格式struct tag {member-list} varible-list;问题一、z = &x; 这句话合法吗?struct{ int a; char b; float c;} x;struct{ int a; char b; float c;} y[20], *z;问题二:以下两个Simple的意义有什么区别?struct Simple{ int a; char b; float...

2021-04-06 23:36:58 86

原创 《跟我一起学makefile》学后感

二、关于编译和链接把大量的 Object File 合成执行文件,这个动作叫作链接(link);链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,在 Windows 下这种包叫“库文件”(Library File),也就是 .lib 文件,在 UNIX下,是 Archive File,也就是 .a 文件。静态库概念:转.

2021-04-05 19:25:35 169

原创 gcc编译过程

1、几个文件(//main.c,//visit.c,//study.c,//visit.h,//study.h)

2021-04-05 12:06:11 463

原创 Pxxx-本地套接字通信

UNIX Domain Socket的特点1.UNIX Domain Socket为什么比TCP/IP在本地上通信更加快因为UNIX Domain Socket不经过网络协议栈 / 不需要打包拆包 / 计算校验和 / 维护序号和应答,只是将应用层数据从一个进程拷贝到另一个进程2.UNIX Domain Socket也提供面向流和面向数据包的两种API接口,类似于TCP和UDP,但是面向消息的 UNIX Domain Socket也是可靠的,消息既不会丢失也不会失序。3.全双工4.目前UNIX D

2021-04-01 23:09:54 3245

原创 03-网络编程深入浅出教程

P31-P32UDP实现的客户端和服务端代码1、客户端#include <stdio.h>#include <arpa/inet.h>#include <sys/socket.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <stdlib.h>#include <netinet/in.h>i

2021-03-27 21:32:36 121

原创 Unix环境高级编程--3-文件IO---3.3-3.8 open,create, close, lseek, read, write

1、int open(cosnt char *pathname, int flag, .../*mode_t mode*/)2、int open(const char *pathname, int flag);flag:必选项:O_RDONLY, O_WRONLY, O_RDWR, O_EXEC,只读, 只写,读写,只执行可选项:O_APPENDO_CLOEXEC 把FD_CLOEXEC常量设置为文件描述符标志,详情查看fcntl函数O_CREATO_DIRRCTORY..

2021-03-27 12:39:37 100

原创 Unix环境高级编程--3-文件IO---3.2文件描述符

文件描述符就是一个非负整数;当我们用open打开一个文件的时候相当于得到了一个结构体;为什么是一个整型数,因为实际上它是一个数组下标;①我们打开一个文件会有一个唯一的inode号用于标识唯一的文件;②当我们用open打开一个文件的时候,产生一个结构体,结构体中有一个position的信息,存放当前文件的属性信息;③用户无法看到这个结构体,因为系统再把结构体指针放在一个大的数组中了,返回了数组的下标;④文件描述符优先选用当前可用最小的;⑤这个用于存放结构体指针的大数组是存在哪呢?? .

2021-03-27 11:47:08 114

转载 关键词restrict,const,volatile

本文转载自:https://blog.csdn.net/SMF0504/article/details/51290499?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161681326616780274171912%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=161681326616780274171912&

2021-03-27 10:57:12 196

docker总结.docx

docker总结.docx

2022-01-16

ANSI《C标准库》P.J.plauger的著作;也就是我们经常调用的库函数接口

----也就是/usr/lib目录下比较常见的libc.a, 如果我们想直到printf之类的c库函数的实现细节,可以查它

2021-05-16

《跟我一起学makefile》加《makefile手册》

免费分享给大加《跟我一起学makefile》加《makefile手册》 希望和大家一起创建共享知识学习的空间!谢谢

2021-04-14

空空如也

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

TA关注的人

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