![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux驱动开发
文章平均质量分 76
饼干饼干圆又圆
这个作者很懒,什么都没留下…
展开
-
嵌入式面试总结
当进程对文件进行操作时,将进行权限检查,如果文件的set-user-ID位权限被设置,内核会将进程的有效ID设置为该文件的用户ID(文件所有者ID),意味着该进程直接获取了文件所有者的权限,以文件所有者的身份操作该文件。inode数据结构中记录了文件的硬链接数,当为文件每创建一个硬链接,inode节点上的链接数就会加1,每删除一个硬链接,inode节点上的链接数就会减1,直到为0,inode节点和对应的数据块才会被文件系统回收。原创 2024-07-22 09:10:32 · 1093 阅读 · 0 评论 -
嵌入式面试总结
对于或运算,如果第一个表达式为真,不需要执行第二个表达式。对于与运算,如果第一个表达式为假,不用执行后面语句。原创 2024-07-20 10:12:29 · 664 阅读 · 0 评论 -
C++专业面试真题(1)学习
孤儿进程孤儿进程是其父进程已经终止但它仍然在运行的进程。当父进程终止时,这些孤儿进程将被系统的systemd收养,由它们负责清理。系统会自动处理孤儿进程。init进程会接管这些孤儿进程,并调用wait系统调用清理它们的资源。僵尸进程僵尸进程是已经终止但其退出状态信息仍然保留在进程表中的进程。僵尸进程保留在进程表中,直到其父进程读取了它们的退出状态。僵尸进程不会消耗任何CPU或内存资源,但会占用进程表项。原创 2024-07-01 15:49:15 · 938 阅读 · 0 评论 -
i.MX6ULL点灯
我们在学习STM32的时候几乎没有用过汇编,但是在进行嵌入式Linux开发的时候是绝对要掌握基本的ARM汇编,因为Cortex-A芯片上电SP指针还没有初始化,C环境没有准备好,所以不能运行C代码,必须先用汇编语言设置好C环境,比如初始化DDR,设置SP指针等。将寄存器IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03的bit3~0设置为0101,此时GPIO_IO03复用为GPIO。寄存器IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03设置GPIO1_IO03的电气属性。原创 2023-06-05 06:54:24 · 537 阅读 · 0 评论 -
make xxx_deconfig过程
首先是清理工程其次就是make mx6ull_14x14_ddr512_emmc_defconfig最后就是编译有目标与之匹配,当输入“make xxx_defconfig”的时候就会匹配到%config目标,目标“%config”依赖于scripts_basic、outputmakefile、FORCE。FORCE在顶层Makefile的1610行有如下定义可以看出FORCE是没有规则和依赖的,所以每次都会重新生成FORCE。原创 2023-06-04 08:10:01 · 796 阅读 · 0 评论 -
U-boot顶层Makefile文件分析(二)
uboot是可以配置的,这里设置配置文件为.config,.config默认是没有的,要使用命令“make xxx_deconfig”对uboot进行配置,配置完成以后就会在uboot根目录下生成.config。每次编译uboot的时候要在make命令后面设置ARCH和CROSS_COMPILE,使用起来很麻烦,所以可以直接修改顶层Makefile,在里面加入两者定义。默认情况下.config和xxx_deconfig内容是一样的,,因为.config 就是从 xxx_defconfig 复制过来的。原创 2023-05-11 08:52:14 · 571 阅读 · 0 评论 -
U-boot顶层Makefile文件分析(一)
假如在当前目录下存在一个“subdir”子目录,这个子目录中又有其对应的 Makefile 文件,那么这个工程在编译的时候其主目录中的 Makefile 就可以调用子目录中的 Makefile,以此来完成所有子目录的编译。设置V=0或者命令行中不定义V的话,编译uboot的时候终端中显示短命令,但是还是会有命令输出,有时候我们在编译uboot的时候不需要输出命令,这个就可以使用 uboot 的静默输出,编译的时候使用“make -s”即可实现静默输出。原创 2023-05-11 08:04:10 · 549 阅读 · 0 评论 -
创建vscode工程阅读uboot源码
在 arch 目录下,我们只需要 arm 文件夹,所以需要将其它的目录从 VSCode 中给屏蔽掉,比如将 arch/avr32 这个目录给屏蔽掉。files.exclude是左侧工程目录中需要排除的文件或文件夹。search.exclude:在搜索结果中排除的文件或文件夹。原创 2023-05-10 20:50:00 · 277 阅读 · 0 评论 -
Uboot源码目录分析
u-boot.bin.cmd里面定义了一个变量:cmd_u-boot.bin,此变量的值为cp u-boot-nodtb.bin u-boot.bin,也就是拷贝一份u-boot-nodtb.bin,并重命名为u-boot.bin。uboot在编译的时候会将同一个目录中所有.c文件便已在一起,并命名为built-in.o,相当于将总多的.c文件对应的.o文件集合在一起,这个就是u-boot文件的来源。.u-boot-nodtb.bin.cmd就是用于生成u-boot.nodtb.bin 的。原创 2023-05-10 17:41:57 · 1263 阅读 · 0 评论 -
U-boot常用命令(二)
命令 bootz 有三个参数,addr 是 Linux 镜像文件在 DRAM 中的位置,initrd 是 initrd 文件在DRAM 中的地址,如果不使用 initrd 的话使用‘-’代替即可,fdt 就是设备树文件在 DRAM 中的地址。addr是应用在DRAM中的首地址,我们可以编译一下裸机例程的实验 13_printf,然后将编译出来的printf.bin拷贝到Ubuntu中的tftp文件夹里,不需要在前面添加IVT信息,因为uboot已经初始化DDR了。bootcmd是一个很重要的环境变量!原创 2023-05-10 15:40:40 · 1820 阅读 · 1 评论 -
U-boot常用命令(一)
在uboot中的nfs命令将Ubuntu中的文件下载到开发板的DRAM中,在使用之前需要开启Ubuntu主机的NFS服务,并且要新建一个NFS使用的目录,以后所有通过NFS访问的文件都需要放到这个NFS目录中。uboot是支持网络的,在移植uboot的时候一般都要调通网络功能,因为在移植linux kernel的时候需要使用到uboot的网络功能做测试。addr是要写入MMC中的数据在DRAM中的起始地址,blk是要写入到MMC的块的起始地址,cnt是要写入的块大小,一个块512字节。原创 2023-05-10 09:24:51 · 1071 阅读 · 0 评论 -
系统移植学习(一)
Linux系统要启动就必须需要一个bootloader程序,也就是说芯片上电以后先运行一段bootloader程序。这段bootloader程序会先初始化DDR外设,然后将Linux内核从flash(NAND,NORA FLASH,SD,MMC等)拷贝到DDR中,最后启动Linux内核。bootloader实际工作要求复杂得多,但它最主要的工作就是启动Linux内核,bootloader和Linux内核的关系就像PC上的BIOS和Windows一样。原创 2023-05-08 19:05:14 · 580 阅读 · 0 评论 -
DDR3学习(一)
static radom access memory,静态随机存储器,这里的“静态”是指只要SRAM上电,那么SRAM里面的数据就会一直保存着,直到SRAM掉电。对于RAM而言需要可以随机的读取任意一个地址空间内的数据,因此采用了地址线和数据线分离的方式。地址线,一共A0~A18,也就是19根地址线,因此可访问的地址大小就是2^19=524288=512KB。数据线,16根数据线,一次访问可以访问16bit的数据,也就是2个字节。原创 2023-05-06 15:22:29 · 1253 阅读 · 0 评论 -
高精度延时
在使用STM32的时候可以使用SYSTICK来实现高精度延时。I.MX6U没有SYSTICK定时器,但是有GPT定时器来实现高精度延时。原创 2023-04-27 21:08:16 · 1275 阅读 · 0 评论 -
定时器按键消抖
按键消抖原理:在按键按下以后延时一段时间再去读取按键值,如果此时按键值还有效就表示这是一次有效的按键,中间的延时就是消抖的。而定时器设置好定时时间,CPU就可以去做其他事情去了,时间到了就会触发中断,然后在中断中做相应的处理即可。但是,延时函数会浪费CPU性能,因为延时函数是空跑。原创 2023-04-27 16:47:01 · 1470 阅读 · 0 评论 -
EPIT定时器实验(一)
EPIT:Enhanced Periodic Interrupt Timer,直译就是增强的周期中断定时器,它主要完成周期性中断定时的。STM32里面的定时器有很多其它功能,比如输入捕获、PWM输出等,但是I.MX6U的的EPIT定时器只是完成周期性中断定时的,仅此一项功能。至于输入捕获、PWM 输出等这些功能,I.MX6U 由其它的外设来完成。EPIT是一个32位定时器,在处理器几乎不用介入的情况下提供精准的定时中断,软件使能以后EPIT就会开始运行。时钟源可选的32位向下计数器。原创 2023-04-27 15:24:05 · 755 阅读 · 0 评论 -
Cortex-A7中断详解(四)
以中断的方式编写KEY按键驱动,当按下KEY以后触发GPIO中断,然后在中断服务函数里控制蜂鸣器的开关。接下来就是要编写按键KEY对应的UART1_CTS这个IO的中断驱动。原创 2023-04-26 21:14:05 · 81 阅读 · 0 评论 -
Cortex-A7中断详解(三)
中断处理结构体,sys_irq_handle_t包含一个中断处理函数和一个中断处理函数的用户参数。一个中断源就需要一个sys_irq_handle_t变量,I.MX6U 有 160 个中断源,因此需要160个sys_irq_handle_t组成中断处理数组。在start.S文件中我们在中断服务函数IRQ_Handler中调用了C函数system_irqhandler来处理具体的中断。此函数有一个参数,参数是中断号。原创 2023-04-26 19:53:06 · 126 阅读 · 0 评论 -
Cortex-A7中断详解(二)
IRQ 和 FIQ 分别是外部中断和快速中断的总开关,就类似家里买的进户总电闸,然后ID0~ID1019 这 1020 个中断源就类似家里面的各个电器开关。某个中断ID的中断优先级设置由寄存器D_IPRIORITY来完成,前面说了Cortex-A7使用了512个中断ID,每个中断ID配有一个优先级寄存器,所以一共有512 个 D_IPRIORITYR 寄存器。同样的 Cortex-A7 的中断优先级也可以分为抢占优先级和子优先级,两者同样是可以配置的。GICD_ICENABLER 寄存器来完成中断的禁止。原创 2023-04-26 16:10:58 · 1198 阅读 · 0 评论 -
Cortex-A7中断详解(一)
Cortex-A7的中断向量表也在代码的最前面,其内核有8个异常中断。复位中断(Reset),CPU复位后就会进入复位中断,我们可以在复位中断服务函数里面做一些初始化工作,比如初始化SP指针,DDR等。未定义指令中断(Undefined Instuction),如果指令不能识别的话就会产生此中断。软中断(Software Interrupt,SWI),由SWI指令引起的中断,Linux的系统调用会用SWI指令来引起软中断,通过软中断来陷入到内核空间。原创 2023-04-26 14:51:16 · 1008 阅读 · 0 评论