嵌入式linux问题及解答

2019-07-12 20:09发布

linux中断的响应执行流程?

1、无名管道通信
内核维护一块内存,有读端和写端。只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
2、有名管道通信
内核维护一块内存,表现形式为一个有名字的文件。传输方式:半双工
3、消息队列通信
4、信号量通信
5、信号 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
6、共享内存通信
7、套接字通信
套接口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。

tasklet与workqueue的区别及底层实现区别

1)softirq和tasklet都属于软中断,tasklet是softirq的特殊实现;workqueue是普通的工作队列。
2)如果推后执行的任务需要睡眠,那么就选择工作队列workqueue(工作队列是基于线程的封装)。
如果推后执行的任务不需要睡眠,那么就选择tasklet。

linux中断的响应执行流程?

处理器收到来自中断控制器的中断处理请求,保存中断上下文,跳转到中断对应的处理处,(快速完成中断中断上半部,中断上半部返回后执行中断下半部。如果做了上下半部处理的话),中断处理函数返回时恢复现场。

uboot是怎么传参给内核的?

简单的讲,uboot利用函数指针及传参规范,它将
R0: 0x0
R1: 机器号
R2: 参数地址
三个参数传递给内核。
其中,R2寄存器传递的是一个指针,这个指针指向一个TAG区域。

linux怎么进行内存管理?

早期计算机中,由于应用程序比较小,可以直接在物理内存中运行,但现在计算机里面程序那么多又那么大,所以就需要对内存进行管理。 1、对内存的分配和管理,也就是平时应用层malloc和内核层vmalloc、kmalloc之类的内存申请的管理。
2、虚拟内存和物理内存之间的转换

请简单说说进程和线程的区别。

简单的来说,一个程序至少有一个进程,一个进程至少有一个线程。 第一点、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。 但这样带来的缺点就是,多线程程序只要有一个线程挂掉了,那么整个进程也就挂掉了,而进程则不会影响另外一个进程,它有自己的独立地址空间。 第二点、线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。

嵌入式软件开发与非嵌入式软件开发区别?

嵌入式软件与非嵌入式软件(设备驱动开发与裸机驱动开发/嵌入式开发与传统单片机开发)的最大的区别就是有无操作系统。 对于无操作系统的开发:
  1. 应用软件与驱动的耦合度过高,一旦硬件发生变化那么相对应的驱动也会发生变化,紧接着应用程序也需要做相应的修改,这样带来的后果就是我们应用程序的可移植性很差。
  2. 无操作系统的系统结构比较单一、功能简单,只能提供单任务机制而且一般软件架构通常都是在一个无限循环中对设备中断进行检测或者轮询。
  3. 它的接口驱动是不进过操作系统直接提交给软件工程师应用。
对于有操作系统的开发:
有操作系统的存在则大大降低了应用软件与硬件平台的耦合度,它充当了我们硬件与应用软件之间的纽带,使得应用软件只需要调用系统软件的应用程序接口API就可以让硬件去完成要求的开发,而应用软件则不需要关心硬件到底是如何工作的。这将大大提高我们应用程序的可移植性和开发效率。同时操作系统还有强大的任务调度机制(进程线程),支持多任务。

如何避免僵尸进程

1、父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起
2、如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后,父进程会收到该信号,可以在handler中调用wait回收。
3、如果父进程不关心子进程什么时候结束,那么可以用“singal(SIGCHLD),SIG_IGN”通知内核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收,并不再给父进程发送信号。
4、还有一些技巧,就是fork()两次,父进程fork一个子进程,然后继续工作,子进程fork一个孙进程后退出,那么孙进程被init接管,孙进程结束后,init会回收,不过子进程回收还要自己做。

实时操作系统, 什么是实时?

实时系统的典型定义如下:“所谓实时系统,就是系统中计算结果的正确性不仅取决于计算逻辑的正确性,还取决于产生结果的时间。如果完成时间不符合要求,则可以说系统发生了问题。”也就是说,不管实时应用程序进行的是何种任务,它不仅需要正确进行该任务而且还必须及时完成它。 人们很容易对实时产生误解,认为实时即速度足够快,实际上,实时并不意味着速度快。实时的关键在于保证完成时间,而不在于原始速度,因为速度性能与硬件相关,可以通过搭建快速硬件平台(处理器、存储器子系统等)来获得所需的性能。而实时的行为是一个软件问题,其目标是让关键的操作能够在所保证的时间之内完成。 实时进程不会影响自己在执行环境中的调度,反而是环境影响实时应用程序的调度。也就是说,实时进程通常和某个物理事件相关联,比如外围设备的中断。那么显然,影响实时的原因在于中断响应延时,在Linux系统中可细分为中断延时、中断处理、调度延时。一般来说,针对用户对超出时间限制所造成的影响的可接受程度,实时又可分为软实时和硬实时。