一、常用宏/结构体/函数
1.1 结构体
linux kernel代码中一般大写加括号的形式基本都是宏。
- IS_ERR
用于判断指针函数的返回值是否为错误码,如果是,则表示该指针函数执行失败 - PTR_ERR
用于将指针型的错误码转换为长整型的
1.2 宏
1.3 函数
-
wait_for_completion
先将x->wait加入到等待队列,在检查done的值,如果为0 ,则死循环卡住。推出循环后,则done
如果驱动程序要在执行后面操作之前等待某个过程的完成,它可以调用wait_for_completion ,以要完成的事件为参数 -
device_register
向系统注册设备,
详细参考:device_register分析
二、fs相关
2.1 结构体
2.2 宏
2.3 函数
2.3.1 功能函数
- ksys_open
调用do_sys_open(),实现打开文件的功能
详细参考链接:详解sys_open
2.3.2 底层函数
-
getname
将文件名从用户空间拷贝到内核空间 -
putname
将文件名从内核空间拷贝到用户空间 -
get_unused_fd_flags
用于获取尚未占用的文件描述符,
在Linux进程中,一个文件描述符唯一地表示一个打开的文件,而打开的文件使用struct file结构体来表示,简单地说,文件描述符就是struct file指针数组的索引。该指针数组保存在进程结构体struct task_struct的(struct files_struct *)files成员中。 -
put_unused_fd
用于获取已占用的文件描述符
三、exec相关
3.1 结构体
3.2 宏
- linux_binprm
保存要执行的文件相关的信息, 包括可执行程序的路径, 参数和环境变量的信息 - linux_binfmt
inux支持其他不同格式的可执行程序, 在这种方式下, linux能运行其他操作系统所编译的程序, 如MS-DOS程序, 活BSD Unix的COFF可执行格式, 因此linux内核用struct linux_binfmt来描述各种可执行程序。
所有的linux_binfmt对象都处于一个链表中, 第一个元素的地址存放在formats变量中, 可以通过调用register_binfmt()和unregister_binfmt()函数在链表中插入和删除元素, 在系统启动期间, 为每个编译进内核的可执行格式都执行registre_fmt()函数. 当实现了一个新的可执行格式的模块正被装载时, 也执行这个函数, 当模块被卸载时, 执行unregister_binfmt()函数.
3.3 函数
3.3.1 功能函数
- do_execve
该函数实现可执行程序的加载和运行。调用do_execveat_common > __do_execve_file() > exec_binprm > search_binary_handler() > load_elf_binary()
详细参考链接: do_execve
3.3.2 基础函数
- __do_execve_file()
- unshare_files() 调用unshare_files()为进程复制一份文件表
- do_open_execat() 调用open_exec()查找并打开二进制文件
- sched_exec() 找到最小负载的CPU,用来执行该二进制文件
- 填充structlinux_binprm结构体中的file、filename、interp成员
- bprm_mm_init() 创建进程的内存地址空间,并调用init_new_context()检查当前进程是否使用自定义的局部描述符表
- 填充structlinux_binprm结构体中的命令行参数argv,环境变量envp
- prepare_binprm() 检查该二进制文件的可执行权限;最后,kernel_read()读取二进制文件的头128字节(这些字节用于识别二进制文件的格式及其他信息,后续会使用到)
- copy_strings_kernel() 从内核空间获取二进制文件的路径名称
- 调用两次copy_strings(),此时二进制文件已经被打开,struct linux_binprm结构体中也记录了重要信息,
- exec_binprm() 识别该二进制文件的格式并最终运行该文件
四、mutex相关
同步机制,可参考链接:link
4.1 结构体
- mutex
4.2 宏
- mutex_lock
锁 - mutex_unlock
解锁 - mutex_init
4.3 函数
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82461.html