嵌入式驱动实习生试题(答案)
一、选择题
1~5 C , B , D,D,C 6~10 C ,D, C,D,D
二、填空题
1.( name ), (probe) ( of_match_table)
2.(系统调用), (硬件中断)
3.(find kernel -name "*.c" | xargs grep "test" -n)
4.(程序崩溃)
5.(总线) (驱动) (设备)
三.简答题
1.答: fork 调用陷入内核,内核中建立子进程,此后启动调度,内核返回到两个不同的进程。2. 答:可能是乱码。
因为GetMemory 返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原先的内容已经被清除,新内容不可知。
3.答:如 int (*getmemory)(int nun);为返回值是int 类型的函数指针,本质是一个指针。
如 int *getmemory (int nun); 为返回值是指向int 类型指针函数,本质是一个函数;
函数声明三要素:返回类型类型、名称、参数。
4.答:
(1)能够输出hello
(2)内存泄漏。
(3)代码修改
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
free(str);
if(str!=NULL)//避免出现野指针。
str=NULL;
}
5.
现代CPU通常实现了不同的工作模式,以ARM为例,实现了7种工作模式:用户模式(usr)、快速中断(fiq)、外部中断(irq)、管理模式(svc)、数据访问中止(abt)、系统模式(sys)、未定义指令异常(und)
Linux系统利用了CPU的这一特性,使用了其中的两级来分别运行Linux内核与应用程序,这样使操作系统本身得到充分的保护。
6.答:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
其实现调用系统调用 clone