- 博客(77)
- 资源 (4)
- 收藏
- 关注
原创 AES算法
收集了几个博主1、https://blog.csdn.net/shaosunrise/article/details/802199502、https://blog.csdn.net/qq_36310253/article/details/1096673813、https://www.cnblogs.com/hello-/articles/8718186.html4、https://blog.csdn.net/qq_38289815/article/details/809008135、ht
2024-05-29 22:23:56
1161
原创 Unix环境高级编程--4-文件和目录--4.1-4.2函数stat-4.3文件类型
struct stat { mode_t st_mode; // file type & mode(permissions) ino_t st_ino; // i-node number(serial number) dev_t st_dev; // device number(filesystem) dev_t st_rdev; // device number for specials files .
2024-05-29 22:22:33
420
1
原创 Unix环境高级编程--7-进程环境--7.1-7.2main函数-7.3进程退出
1、几个问题①main函数如何被调用?②命令行参数如何传递给新程序?;③典型储存空间布局是什么样的?;④进程如何使用环境变量 ?;⑤进程的各种终止方式?2、main函数当内核执行C程序时,...
2024-05-29 22:22:08
581
原创 Unix环境高级编程--8-进程控制---8.1-8.2进程标识-8.3fork函数-8.4 vfork函数
1、进程控制几个过程创建进程--》执行进程---》终止进程2、进程标识(1)专用进程:ID为0的进程是调度进程,常常被称为交换进程,也称为系统进程; ID为1通常是init进程,在自举结束时由内核调用;(2)函数:pid_t getpid(void); 获取当前进程id pid_t getppid(void);获取父进程id3、fork函数...
2024-05-29 22:21:56
732
原创 Unix环境高级编程--8-进程控制---8.7函数waitid 8.8函数wait3 wait4
1、Single Unix Specification支持一个取得进程终止状态的函数--waitid,此函数类似于waitpid: pid_t wait(int *status); pid_t waitpid(pid_t pid, int *status, int options); int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);2、wait3和wait4 ...
2024-05-29 22:21:41
588
原创 第三章 Linux目标文件解析
解析目标文件内容:举例说明//root@ubuntu:/mnt/hgfs/share/019-proself/04# cat simplesection.cint printf(const char* format,...);int global_init_var=84;int global_uninit_val;void func1(int i){ printf("%d\n",i);}int main(void){ static int static_
2024-05-29 22:21:27
931
原创 全新Linux教程-驱动大全-PCI和PCIe子系统-P6-PCIe路由方式
和前面讲的类似,就是通过桥的地址范围进行过滤,不管来自上层的地址还是来自endpoint的地址,桥都会进行处理转发。主要是TLP的头部。主设备要给EndPoint的内存写数据,它发出"内存写报文",不需要对方回应。主设备要给EndPoint的IO写数据,它发出"IO写报文",需要对方回应。主设备要读EndPoint的内存数据,它发出"内存读报文",需要对方回应。主设备要读EndPoint的IO数据,它发出"IO读报文",需要对方回应。PCIe设备(EndPoint)被配置后,它记录有分配给它的基地址。
2024-04-20 15:55:11
702
原创 全新Linux教程-驱动大全-PCI和PCIe子系统-P4从软件的角度看pcie硬件结构
注释:了解pcie的硬件接口,lanes,link,串行,并行,包结构。
2024-04-20 12:42:07
629
原创 全新Linux教程-驱动大全-PCI和PCIe子系统-P3-PCI设备的访问方法-桥设备
本节主要讲了如何去配置桥设备和桥之后的设备。上节已经讲到可以直接通过不同引脚访问直连的PCIe Agent设备。①IDSEL ②C/BE ③AD[31:0]访问funciotn和寄存器。
2024-04-20 12:24:59
357
原创 全新Linux教程-驱动大全-PCI和PCIe子系统-P1-从软件角度看PCI和PCIE
①使用差分信号串行接口。②PCI和pcie对于CPU来说是兼容的。参考:01_pcie接口引脚电路示例_AX99100.pdf`
2024-04-20 11:46:18
580
原创 全新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
1244
原创 win10网卡“该设备无法启动(代码10)”
微星电脑突然出现网卡无法启动,后来尝试了网上的各种方法没解决(网卡驱动卸载重装,升级驱动,释放静电等待)。然后用下面的办法才解决的。(1)win+x 选择windoes shell 管理员。
2023-06-23 11:13:05
2838
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
279
原创 第二季--上学期--专题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
1197
原创 第二季--上学期--专题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
407
原创 第二季--上学期--专题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
794
原创 第二季--上学期--专题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
303
原创 第二季--上学期--专题10 C语言环境初始化--01栈初始化
1、参考链接ARM——栈 - dongry - 博客园【精华】程序员的自我修养视频教程_哔哩哔哩_bilibili2、栈的初始化1、概念解析:栈桢---sp栈指针 fp栈基址栈:栈是一种具有后进先出的数据组织方式,也就是说后放进去的数据后面取出来(也可以是数据结构体对象)。栈底是第一个进栈的数据所在的位置,栈顶是最后一个数据所处在的位置。数据组织有:链表、图、树等等。我们把数据的组织实现方式当成黑盒使用即可。pop(stack,&data)push(stack,&
2022-04-29 21:11:21
1502
原创 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
949
原创 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
919
原创 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
474
原创 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
1094
原创 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
802
原创 硬件原理图之GPIO
1、GPIO和门电路学习什么是输入输出引脚?作为输入引脚2、什么是上拉电阻?什么是下拉电阻??3、查看LED电路图nLED1-4直接接芯片,当它们作为输出引脚的时候,并且赋予低电平时,点灯。反之。分别接芯片的GPB5 6 7 8引脚。继续查看芯片手册IO端口的章节,查看如何配置该引脚作为输出或者输入。按键电路图分析4、中断对于某些芯片来说,GPIO的引脚同时也可以用于中断引脚。...
2021-10-30 19:26:05
516
原创 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
3024
原创 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
1946
原创 中断处理机制
(1)为什么内核需要中断?(2)硬件实现一个中断需要做什么?注册就是告诉内核的存在;(3)什么是快中断 什么是慢中断?前者不允许发生中断嵌套read属于中断上下文还是进程上下文?中断上下文,进程上下文的区别?因为函数是由进程主动实现的,所以属进程上下文。中断上下文属于硬件引起的。在中断处理函数中,没有所谓的进程的概念。所以不存在直接向用户空间发送消息,也不存在进程的调度,以及进程阻塞。内核中...
2021-10-19 22:35:08
251
原创 原来实现系统调用那么简单
系统调用:执行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
99
原创 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
140
原创 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
253
原创 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
274
原创 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
284
原创 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
261
原创 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
276
原创 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
89
ANSI《C标准库》P.J.plauger的著作;也就是我们经常调用的库函数接口
2021-05-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人