文章目录
- 一、Linux文本三剑客---grep、sed、awk
- 二、Linux内核模块相关命令
- 三、Linux内核日志级别
- 四、Linux内存管理之kmalloc kzalloc vmalloc malloc 和get_free_page()的区别
- 五、Linux的调度策略
- 六 、(多选)下列哪些是linux驱动开发中常用的调试技术()
- 七、简述GDB常见的调试命令,什么是条件断点,多进程下如何调试。
- 八、linux常见填空题
- 九、开发常见专业缩写名词
- 十、问答题
- 参考链接
一、Linux文本三剑客—grep、sed、awk
awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。
-
grep——Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来(匹配到的标红)。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
命令格式 :grep [option] pattern file
常用参数:
-A<显示行数>:除了显示符合范本样式的那一列之外,并显示该行之后的内容。 -B<显示行数>:除了显示符合样式的那一行之外,并显示该行之前的内容。 -C<显示行数>:除了显示符合样式的那一行之外,并显示该行之前后的内容。 -c:统计匹配的行数 -e :实现多个选项间的逻辑or 关系 -E:扩展的正则表达式 -f FILE:从FILE获取PATTERN匹配 -F :相当于fgrep -i --ignore-case #忽略字符大小写的差别。 -n:显示匹配的行号 -o:仅显示匹配到的字符串 -q: 静默模式,不输出任何信息 -s:不显示错误信息。 -v:显示不被pattern 匹配到的行,相当于[^] 反向匹配 -w :匹配 整个单词
-
sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace ),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’ 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出或-i。
命令格式:sed [options] '[地址定界] command' file(s)
常用选项:
-n:不输出模式空间内容到屏幕,即不自动打印,只打印匹配到的行 -e:多点编辑,对每行处理时,可以有多个Script -f:把Script写到文件当中,在执行sed时-f 指定文件路径,如果是多个Script,换行写 -r:支持扩展的正则表达式 -i:直接将处理的结果写入文件 -i.bak:在将处理的结果写入文件之前备份一份
-
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。
命令格式 :awk [options] 'program' var=value file… awk [options] -f programfile var=value file… awk [options] 'BEGIN{ action;… } pattern{ action;… } END{ action;… }' file ...
常用选项:
-F fs:fs指定输入分隔符,fs可以是字符串或正则表达式,如-F: -v var=value:赋值一个用户定义变量,将外部变量传递给awk -f scripfile:从脚本文件中读取awk命令
二、Linux内核模块相关命令
- dmesg —— 查看Linux内核日志
- lsmod —— 列出已经加载的内核模块;
- modinfo ——查看模块信息;
- modprobe —— 挂载新模块以及新模块相依赖的模块
- rmmod —— 移除已挂载模块;
- depmod —— 创建模块依赖关系的列表
- insmod —— 挂载模块;
三、Linux内核日志级别
emerg: System is unusable.
alert: Action must be taken immediately.
crit: Critical conditions.
err: Error conditions.
warn: Warning conditions.
notice: Normal but significant condition.
info: Informational.
debug: Debug-level messages.
Linux内核日志查看之dmesg命令简介:Linux内核日志查看之dmesg命令简介
四、Linux内存管理之kmalloc kzalloc vmalloc malloc 和get_free_page()的区别
-
kmalloc申请的是较小的连续的物理内存,虚拟地址上也是连续的。kmalloc和get_free_page最终调用实现是相同的,只不过在调用最终函数时所传的flag不同而已。除非被阻塞否则他执行的速度非常快,而且不对获得空间清零。
-
get_free_page()申请的内存是一整物理页,一页的大小一般是128K。
区别:kmalloc() 分配连续的物理地址,用于小内存分配。 __get_free_page() 分配连续的物理地址,用于整页分配。
-
kzalloc 先是用 kmalloc() 申请空间 , 然后用 memset() 清零来初始化 ,所有申请的元素都被初始化为 0.
-
vmalloc用于申请较大的内存空间,虚拟内存是连续,但是在物理上它们不要求连续。
-
malloc 用于用户空间申请内存。除非被阻塞否则他执行的速度非常快,而且不对获得空间清零。
五、Linux的调度策略
linux内核的三种主要调度策略:
- SCHED_OTHER :分时调度策略,
- SCHED_FIFO : 实时调度策略,先到先服务
- SCHED_RR :实时调度策略,时间片轮转
六 、(多选)下列哪些是linux驱动开发中常用的调试技术()
A、使用printk输出信息
B、使用Valgrind检查内存泄漏
C、使用Kprobes进行动态服踪
D、使用ltrace监视系统调用2
E、使用GDB调试内核代码
答:A,C,D,E是linux驱动开发中常用的调试技术。答案选择为ACDE。
解析:
选项A:使用printk输出信息:
1. printk是Linux内核中用于输出信息的函数,可以将信息打印到系统日志中,是Linux驱动开发中非常常用的调试方法,用于输出关键信息以帮助开发者了解程序的执行情况和状态,因此是常用
的调试技术。
选项B:使用Valgrind检查内存泄漏:
2. Valgrind是一个内存调试工具,主要用于用户空间程序的内存泄漏检查,而不是专门用于内核空间的调试,因此在驱动开发中并不常用。
选项C:使用Kprobes进行动态跟踪:
3. Kprobes是Linux内核提供的动态跟踪机制,可以在代码执行过程中插入探针(probes)来监控
和调试程序,是驱动开发中常用的调试技术。
选项D:使用Itrace监视系统调用:
4. Itrace用于跟踪和记录系统调用,帮助开发者分析和解决问题,是Linux驱动开发中常用的调试
技术。
选项E:使用GDB调试内核代码
5. GDB(GNU调试器)可以用于调试内核代码,通过它可以进行断点设置、单步执行等操作,是驱
动开发中常用的调试工具。
综合以上分析,选项A、C、D、E均为Linux驱动开发中常用的调试技术,而选项B则不常用。
七、简述GDB常见的调试命令,什么是条件断点,多进程下如何调试。
GDB(GNU Debugger)是一个强大的命令行调试工具,用于对程序进行调试和分析。下面是 GDB 的常见调试命令以及关于条件断点和多进程调试的简要说明:
常见调试命令:
1. break(或 b):设置断点,断点可以在指定的源代码行位置暂停程序的执行。
2. run(或 r):启动程序的执行,如果有断点,则执行到第一个断点处暂停。
3. continue(或 c):继续执行程序,直到遇到下一个断点或程序结束。
4. next(或 n):执行下一条语句,但是不会进入函数。
5. step(或 s):执行下一条语句,并进入函数。
6. print(或 p):打印变量的值。backtrace(或 bt):打印函数调用堆栈。
7. quit(或 q):退出 GDB。
条件断点:
条件断点是根据给定的条件在程序执行过程中暂停的断点。可以使用 break 命令并在源代码行位置后添加条件表达式来设置条件断点。例如:其中 line_number 是要设置断点的源代码行号,condition 是表示条件的表达式。只有当条件表达式为真时,断点才会触发。
多进程调试:
在 GDB 中,可以调试多进程程序。使用 attach 命令可以连接到正在运行的进程,让 GDB 托管该进程进行调试。例如:其中 pid 是要调试的进程的进程 ID。连接成功后,就可以使用调试命令对该进程进行调试。还可以使用 info inferiors 命令查看当前连接的进程列表。另外,GDB 还提供了一些特殊的命令用于处理多进程调试,如 inferior 命令用于切换当前活动进程,detach 命令用于从进程中分离 GDB。
八、linux常见填空题
- Linu下的一个进程在内存里包括三部分的数据,它们是()
答:代码段,数据段,堆栈段 - 目前使用的嵌入式操作系统主要有
答:Linux,Windows CE,uc/OS,Android(其他:VxWorks,PalmOS,QNX,Symbian等) - 如果按用途划分,嵌入式微处理器可分为哪几类?
答:嵌入式微控制器(MCU),又称为单片机;嵌入式微处理器(EMPU);嵌入式DSP处理器;嵌入式片上系统(SOC) - ARM核有两个指令集,分别是:()和()
答:ARM指令集,Thmb指令集 - Makefle里主要包括的语法规则有哪些:
答:显式规则,隐跨规则,变量定义,文件指示,注释 - 大多数Bootlouder都包含两种不同的操作模式,分别是(),()
答:启动加载模式,下载模式 - Linux内核的配置系统由三部分组成,它它们分别是:
答:Makefile,配置文件(config),配置工具
九、开发常见专业缩写名词
- RISC : reduced instruction set computer,精简“指令集计算机”
- MCU : MicroControllerUnit,微控制单元
- DSP : Digital Signal Processor,数字信号处理器
- ROM : read-only memory,只读存储器
- SWI : Softare InterruptPC : 程序计数器
- IRQ : 外部中断请求
- NFS :Network File System网络文件系统
- SOC : System On Chip,片上系统
- CPSR : 当前程序状态寄存器
- ICE : In Circuit Emulator,实时在线仿真器
- MMU :Memory Management Unit,内存管理单元
- FIQ : 快速中断请求
- VFS :虚拟文件系统
- IPC : Inter-Process Communication , 内部进程间通信
- IR : 指令寄存器
十、问答题
-
嵌入式开发环境主要包括哪些组件?
答:嵌入式系统开发需要交又编译和在线调试的开发环境,主要包括宿主机目标机(评估电路板)基于JTAG的ICD仿真器、或调试监控软件、或在线仿真器ICE运行于宿主机的交叉编译器和链接器、以及开发工具链或软件开发环境。 -
什么是嵌入式系统,嵌入式系统同PC系统相比具有哪些特点?
答:根据电气工程师协会的定义,嵌入式系统(Embedded System)是用来控制或者监视机器、装置、工厂等大规模系统的设备。一般认为嵌入式系统是以应用为中心,以计算机技术为基础,其软/硬件可裁减,可满足应用系统对功能、可靠性、成本、体积、功耗的严格要求的专用计算机系统。
(1)嵌入式系统功耗低、体积小、专用性强。嵌入式系统与PC系统的最大不同就是嵌入式CPU大多工作在为特定用户群设计的系统中,能够把PC系统中许多由板卡完成的任务集成在芯片内部,从而使系统设计超于小型化。
(2)嵌入式系统中的软件一般都固化在存储器芯片或单片机芯片中,以提高执行速度和系统可靠性
(3)嵌入式系统的硬件和软件都经过精心设计,系统精简,其操作系统一般和应用软件集成在一起。
(4)软件代码质量要求高。
(5)嵌入式系统开发需要专门的开发工具和开发环境。 -
BoottLoader在嵌入式系统中主要起什么作用?完成哪些主要的工作?
答 : BootLoader是在操作系统运行之前执行的一段程序,通过这段程序,初始化硬件设备,建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。BootLoader的stage1(第一阶段)通常包括以下工作:
(1)硬件设备初始化
(2)加载Bootloader的stage2准备ARM空间
(3)接贝Bootloader的stage2到RAM空间中
(4)设置堆栈
(5)跳转到stage2的C入口点BootLoader的stage2通常包括以下工作
(1)初始化本阶段要使用到的硬件设备
(2)检测系统内存映射
(3)将内核映像和根文件系统映像从fash设备上复制到RAM空间中
(4)设置内核启动参数
(5)调用启动内核
参考链接
Linux文本三剑客超详细教程—grep、sed、awk
linux内核模块加载命令
Linux内存管理
Linux内核vmalloc原理与实现
Linux下的调试工具strace与ltrace