![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 90
饼干饼干圆又圆
这个作者很懒,什么都没留下…
展开
-
嵌入式面试总结
通过rand()可以得到[0,RAND_MAX]之间的伪随机数,但是每次运行的序列是相同的,通过srand()设置随机数种子。目录块中有多个目录项,每一个目录项都会对应到该目录下的某一个文件,目录项记录了该文件的文件名以及inode节点。在函数内部声明的静态变量会保持其值,直到程序结束,它们在内存中位置固定,不会随着函数的调用而销毁和重新创建。当函数被声明为静态时,它的作用域仅限于声明它的文件内部,不可见于其它文件中的代码。kill函数用于发送一个信号,在发送信号的时候需要指定接收信号的进程。原创 2024-07-24 19:06:17 · 560 阅读 · 0 评论 -
嵌入式面试总结
当进程对文件进行操作时,将进行权限检查,如果文件的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 评论 -
嵌入式面试总结
在计算机系统中,通常存储空间分为两种:内部存储空间和外部存储空间。内部存储空间通常访问速度比较快,能按照变量地址随机访问。也就是我们所说的RAM(随机存储器)。外部存储空间保存的内容相对固定,即使掉电后数据也不会丢失。变量,中间数据一般存放在RAM中,只有实际使用时才将它们从RAM调入到CPU中进行运算。一些数据需要的内存大小在程序运行过程中根据实际情况确定,这就要求具备动态管理内存的能力。原创 2024-07-19 07:36:54 · 612 阅读 · 0 评论 -
嵌入式Linux应用层开发 I/O操作
每个进程都有一个文件描述符表:文件描述符表在底层通过数组来实现的。文件描述符实际上是这个数组的偏移量。执行代码int fd = open(“test.txt”, O_RDONLY);//描述符表会增加一项当我们执行open()等系统调用时,内核会创建一个新的struct file,这个数据结构记录了文件的元数据(文件类型、权限等)、文件路径、支持的操作等,然后分配文件描述符,将struct file维护在文件描述符中,最后将文件描述符返回给应用程序。原创 2024-06-20 07:42:32 · 776 阅读 · 0 评论 -
Linux中APP读取按键的4种方法
APP 调用 open 时,导致驱动中对应的 open 函数被调用,在里面配置 GPIO 为输入引脚。APP 调用 read 时,导致驱动中对应的 read 函数被调用,它读取寄存器,把引脚状态直接返回给 APP。APP得到poll/select函数的返回结果后,如果确认是有数据的,则再调用read函数,这会导致驱动中的read函数被调用,这时驱动程序中含有数据,会直接返回数据。这会导致驱动中对应的poll函数被调用,如果有按键数据则直接返回给APP,否则APP在内核态休眠一段时间。这里发的是SIGIO。原创 2024-03-27 18:48:20 · 997 阅读 · 0 评论 -
Linux设备树
根节点下也有compatible属性,用来选择哪一个“machine desc”:一个内核可以支持machine A,也支持machine B,内核启动后会根据根节点的compatible属性找到对应的machine desc结构体,执行其中的初始化函数。设备树文件不需要我们从零写出来,内核支持某款芯片比如imx6ull,在内核的arch/arm/boot/dts目录下就有了能用的设备树模板,一般命名为xxx.dtsi,i表示include,被别的文件引用的。对于数值,可以用hexdump把它打印出来。原创 2024-03-27 17:22:36 · 924 阅读 · 0 评论 -
Linux 系统调用
Linux有一个“未实现”系统调用sys_ni_syscall(),它除了返回-ENOSYS外不做任何其它工作,这个错误号就是专门针对无效的系统调用而设的。此外,如果一个系统调用被删除,它所占用的系统调用号也不允许被回收利用,否则,以前编译过的代码会调用这个系统调用,但事实上却调用的是另一个系统调用、这个表为每一个有效的系统调用指定了唯一的系统调用号。所以,应用程序应该以某种方式通知系统,告诉内核自己需要执行一个系统调用,希望系统切换到内核态,这样内核就可以代表应用程序在内核空间执行系统调用。原创 2023-12-23 16:41:16 · 949 阅读 · 0 评论 -
Linux内核设计与实现
于是,内核用C语言编写了函数context_switch()用于实现进程切换,而在它的内部,则会调用switch_to()和switch_mm()分别完成处理器上下文和地址空间的切换。它们只能看到允许它们使用的部分系统资源,并且只能使用某些特定的系统功能,不能直接访问硬件,也不能访问内核划给别人的内存范围,还有一些使用限制。许多操作系统的中断服务程序,包括Linux的,都不在进程上下文中执行。一些库调用提供了系统调用不具备的许多功能,在那些较为复杂的函数中,调用内核的操作通常只是整个工作的一个步骤而已。原创 2023-12-23 14:49:02 · 1045 阅读 · 0 评论