logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

linux-5.10.110内核源码分析 - Freescale ls1012a pcie host驱动

其中reg里面的configuration space [0x4000000000, 0x4000000000+0x2000)为配置空间的cpu地址,所有ep的配置空间的cpu地址都在这段地址空间,都写这段地址具体是操作总线上的那个设备是由pcie控制器的额外的寄存器也区分,也就是访问具体pcie配置空间的时候,需要把bus、device、function信息写入pcie控制器。后面具体代码后看到

文章图片
#linux#arm
ThreadX内核源码分析 - 计数信号量

1、计数信号量介绍计数信号量的信号量值不为0,表示信号量可获取,每次获取信号量,信号量计数器的值减1,为0是,信号量不看获取,释放信号量是每次加1;计数信号量实现与互斥锁类似,一定程度上可以把互斥锁看出计数为1的信号量,只不过互斥锁有动态优先级调整,信号量没有,互斥锁用于临界资源保护,信号量用于生产消费者这类场景(多个消费者、多个生产者)。2、信号量获取_tx_semaphore_get获取信号量

文章图片
ThreadX内核源码分析 - 动态内存管理

ThreadX内核与μC/OS-II、NucleusPlus内核一样,都支持固定大小的内存块管理,也支持不固定大小的内存块管理。固定大小的内存块管理是把一片内存分割成大小相同的多个内存块,以整块内存分配和释放,例如内存块大小为1024字节,那么每次只能申请释放1024字节的内存,一般只适合大小固定的内存块申请释放场景,类似linux的2的n次方的内存页申请,mmu只能管理页,不能把页分成更小的内存

文章图片
#嵌入式
ThreadX内核源码分析 - 消息队列

1、消息队列介绍ThreadX内核的消息可以多线程收发,每个消息的大小固定;消息队列有一定的大小,超过大小之后,发送消息的线程需要等待消息被取走才能往消息队列里面再次发送消息。2、消息的接收_tx_queue_receive消息接收主要检查有没有消息,没有消息就要等待消息或者返回消息队列为空的错误码;如果消息队列不为空,并且没有发送消息的线程等待消息队列(消息队列不为空),那么直接从消息队列最前面

文章图片
ThreadX内核源码分析(SMP) - 线程多核映射

整个过程就是先把能占的核先占了,如果被占的核上的线程能移动到空闲核上,那么就移动到空闲核上面去,如果不能,那就递归占能占的核。

文章图片
ThreadX内核源码分析(SMP) - 核间互斥(arm)

在单核的ThreadX内核中,内核的临界资源互斥通过关中断实现;在多核cpu上,关闭整个cpu的代价比较大,单核上仍然使用关中断实现(其他核的中断仍然开启),但是与其他核之间互斥通过_tx_thread_smp_protection实现:首先,单核已经关中断,那么正在访问资源的线程不会被切换出去,在退出临界资源之前,当前核上的线程不会被中断,也就是在退出临界资源前当前核不会有其他线程执行,当前核的

文章图片
linux-5.10.110内核源码分析 - bcm2711 SATA驱动(AHCI)

如上图,其中HBA Registers为PCIe设备的BAR空间,配置空间的ABAR用于指示AHCI用于指示HBA Registers在哪个BAR,默认情况下是BAR5,ahci_init_one没有读该寄存器,而是使用默认AHCI_PCI_BAR_STANDARD,内核驱动根据vendor、device处理非标准情况。

文章图片
#linux
ThreadX内核源码分析 - 事件

1、ThreadX内核事件介绍ThreadX事件有点类似epoll,线程可以等待单个事件/多个事件等(epoll一个事件就绪即可返回,ThreadX可以等待多个事件都就绪才返回),从代码实现上看,ThreadX可以多个线程等待同一个事件,获取事件之后还可以不清除事件,epoll在网络编程中,似乎还没看到多个线程对一个事件监听的情况,具体能否多个线程调用epoll监听同一事件还得看linux内核代码

文章图片
linux网络协议栈源码分析 - 传输层(TCP连接的建立)

linux网络协议栈源码分析 - 传输层(TCP连接的建立)

文章图片
#linux#tcp/ip#网络协议
    共 19 条
  • 1
  • 2
  • 请选择