- 博客(15)
- 资源 (19)
- 收藏
- 关注
原创 HDMI发展历程
HDMI 1.0 (起源)HDMI组织在2002年12月9日正式发布了HDMI 1.0版标准,标志着HDMI技术正式进入历史舞台。支持:全高清 1080/60p(即1920*1080分辨率,60hz刷新率)影像传输,支持从DVD到蓝光格式的视频流,最高频带宽达到 4.95 Gbps。当中 3.96Gbps用作传输视频流,音频方面支持8声道的 LPCM 24bit/192kHzHDMI 1.1HDMI1.1最大的改变是新增了对DVD音频的支持。HDMI 1.2HDMI1.2版本于2005年
2021-06-04 15:04:15
5528
原创 Linux内核解析-内核同步方法
临界区和竞争条件临界区:访问和操作共享数据的代码段。竞争条件:两个或多个执行线程处于同一个临界区中同时执行,那么会存在线程竞争,即竞争条件。所谓同步,其实防止在临界区中形成竞争条件。如果临界区里是原子操作(即整个操作完成前不会被打断),那么自然就不会出竞争条件。但在实际应用中,临界区中的代码往往不会那么简单,所以为了保持同步,引入了锁机制。保护机制原子操作对单个变量保护一般是使用原子操作。原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何上下文切
2021-06-01 23:44:24
304
2
原创 Linux内核解析-中断和中断处理
中断概念中断是一种通知机制,中断使得硬件得以发出通知给处理器。中断的本质是一种特殊的电信号,由硬件设备发向处理器,处理器接收到中断后,会马上向操作系统反映此信号的到来,然后由操作系统负责处理这些新来的数据。所以中断的生成并不考虑与处理器同步,即中断是可以随时产生的,所以内核随时都可能会被中断打断。中断通过中断请求(IRQ)线来识别是哪种中断。说到中断就需要提一下异常了:异常和中断不同,异常在产生的时候需要考虑预处理器时钟同步,所以异常常常也被称为同步中断,异常的发生一般都是内部一些编程失误(如除0
2021-05-31 20:24:28
852
原创 内核数据结构
内核中的链表Linux内核中使用的链表方式可谓是独树一帜,它将各个结构体链接在一起并不是将数据结构塞入链表,而是将链表节点塞入数据结构!如普通的链表结构:struct fox { long tail_length; long weight; struct fox *nex; struct fox *prev;};上面这种双链表结构是最常见的结构,是直接将fox结构放入链表中。而Linux内核使用的是如下方式:struct list_head { struct list_head *
2021-05-25 22:42:54
309
1
原创 系统调用
系统调用系统调用是什么?系统调用是用户进程与内核进行交互的一组接口,系统调用让应用程序受限的访问硬件设备,提供了创建新进程并与已有进程进行通信的机制,也提供了申请操作系统其他资源的能力。系统调用在内核软件框架位置如下图:![][系统调用]从上图可见,系统调用是位于用户与内核之间的一组接口,所以系统调用层主要有以下功能:它为用户空间提供了一种硬件的抽象接口。系统调用保证了系统的稳定和安全。系统调用的存在使得每个进程都运行在虚拟系统中,为实现多任务和虚拟内存提供了便利。系统调用Lin
2021-05-24 22:20:02
246
原创 Linux内核之进程管理
进程管理概念:程序:本身并不是进程,程序指的是可执行的程序。进程:进程是处于执行期的程序以及相关资源的总称。进程并不仅仅局限于一段可执行程序代码,还要包括其他资源,如打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间及一个或多个执行线程。线程:是指进程中活动的对象。每个线程都拥有一个独立的程序计数器、进程栈和一组进程寄存器,内核调度的对象是线程,而不是进程,线程只不过是特殊的进程。僵死进程: 子进程退出后,其父进程调用wait()回收前的子
2021-05-18 23:37:23
155
原创 加载新驱动的方法
加载新驱动的方法(以字符驱动为例)1. 将驱动编译进内核(方法一)将新驱动文件放入字符驱动对应的目录下,然后更改该目录下的Kconfig和Makefile文件:Kconfig添加config选项,参照已有驱动格式添加。config TELCLOCK tristate "Telecom clock driver for ATCA SBC" depends on EXPERIMENTAL && X86 default n help The telecom clock
2021-03-23 14:41:17
2289
3
原创 Linux驱动程序框架
LINUX驱动程序框架Linux应用程序是通过系统调用来产生一个swi异常来进入内核态从而调用驱动程序。框图如下:用户进程利用系统调用在对设备文件进行诸如读写操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着将控制权交给该函数。所以需要实现驱动程序的:open、read、write、ioctl等函数。所以一个驱动程序的一般步骤:定义驱动程序的入口和出口函数:module_init(My_drv_init);``module_exit(M
2021-03-23 14:40:47
345
原创 Init进程
Init进程嵌入式系统中命令都指向busybox程序,busybox是一系列命令的组合。所以当执行ls时,实际上是执行busybox ls。init程序的目的是启动用户应用程序。过程大概是:读取配置文件、根据配置文件配置运行环境、启动用户程序。busybox首先调用init_main()函数。init_main()函数首先设置信号处理函数``:/* Set up sig handlers -- be sure to * clear all of these in run() */ s
2021-03-22 11:47:22
544
原创 Linux内核配置编译过程
配置三种方法:make menuconfig(成千上万配置项要配置,很复杂,不可取)使用默认的配置,在此基础上修改。(但现在不知道默认的配置有哪些。可以搜索下)使用厂家提供的配置文件。(将厂家提供的 config厂家直接复制一份为. config,然后再make menuconfig配置过程是剪裁模块,将不需要的模块从编译列表中去除,加入需要的模块。配置成功后会生成.config文件,该文件用于编译时来选择需要编译的模块。编译编译时会加载.config文件来选择编译模块。make
2021-03-22 11:46:24
246
1
原创 Linux内核启动过程
Linux内核启动过程内核启动的最终目的:运行应用程序,应用程序在根文件系统中,所以需要先挂载根文件系统。启动文件:arch/arm/kernel/head.s第一阶段:先判断是否支持机器ID(uboot启动内核时传入的参数):第一阶段功能:链接内核时使用的虚拟地址,设置页表、使能MMU。赋值数据段、清除BSS段、调用start_kernel函数ENTRY(stext) msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc m
2021-03-22 11:45:36
405
1
原创 代码重定位
重定位NOR与NAND:上电时(2440为例):nandflash不能本地运行,需要将前4K内容复制到2440的片内sdram若程序超过4k时,则前4k需要把全部程序重定位到整个SDRAM上。所以需要写时(全局变量,静态变量),需要重定位到SDRAM中才能修改其值。norflash则可以直接在本地运行(cpu可以直接读flash的值,但是不能直接写,需要一定的写序列才能写)为了让在norflash启动时,能够修改数据段,所以需要把数据段重定位到SDRAM地址上,查看原理图和手册,
2021-03-05 10:57:15
315
1
原创 u-boot启动流程
u-boot启动流程u-boot启动过程分为两个阶段(2440为例):1. 第一阶段功能:入口是start.S汇编文件:硬件设备初始化//跳转到reset函数,设置cpu模式为SVC32管理模式.globl _start_start: b resetreset: /* * set the cpu to SVC32 mode */ mrs r0,cpsr bic r0,r0,#0x1f orr r0,r0,#0xd3 msr cpsr,r0 //关
2021-02-27 10:27:09
298
原创 u-boot编译过程
u-boot编译过程配置:make **config编译:make1. 配置2440使用命令make 100ask24x0_config来配置makefile,此过程主要内容:查看100ask24x0_config所在makefile选项:@$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0其中$(@:_config=)表示把100ask24x0_config的_config替换为空格即删掉。@$(MKCONF
2021-02-27 10:26:34
2169
5
Linux设备驱动程序设计入门.7z
2021-11-09
linux驱动程序开发.7z
2021-11-09
Modbus协议栈(主从)
2020-09-23
MySQL菜鸟教程.pdf
2020-07-14
Linux系统服务.doc
2020-07-14
你必须知道的495个c语言问题
2019-03-07
c语言算法精解
2018-11-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人