嵌入式知识点总结 Linux驱动 (一)-指令-常用Linux指令 GCC指令 GDB调试指令 驱动开发指令
针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。
目录
1.怎么查看当前进程?怎么执行退出?怎么查看当前路径?
2.ls命令执行有什么功能?可以带哪些参数?
3.创建目录用什么命令?
4.创建文件用什么命令?
5.复制文件用什么命令?
6.查看文件内容有哪些命令可以使用?
7.怎么向屏幕输出带空格的字符串,比如“hello world"?
8.移动文件用哪个命令?改名用哪个命令?
9.删除文件用哪个命令?如果需要连目录及目录下文件一块删除呢?删除空文件夹用什么命令?
10.查找文件内容用哪个命令? *
11.查找文件用哪个命令? *
12.cat命令
13.预处理
14.编译为汇编代码
15.汇编
16.链接
17.一步到位编译
18.多文件编译
19.警告处理
20.常用的GDB调试指令
21.加载/卸载驱动
22.Linux驱动如何查看驱动模块中打印信息?
23.如何查看内核中已有的字符设备的信息?
24.如何查看正在使用的有哪些中断号?
1.怎么查看当前进程?怎么执行退出?怎么查看当前路径?
查看当前进程:ps
执行退出:exit
查看当前路径:pwd
2.ls命令执行有什么功能?可以带哪些参数?
列出当前路径目录和文件等相关名称
参数
-a显示所有文件及目录(.开头的隐藏文件也会列出)
-除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
-r将文件以相反次序显示(原定依英文字母次序)
-t将文件依建立时间之先后次序列出
-A 同 -à ,但不列出""(目前目录)及 ".."(父目录)
-F 在列出的文件名称后加一符号;例如可执行档则加"*",目录则加""
-R 若目录下有文件,则以下之文件亦皆依序列出
3.创建目录用什么命令?
mkdir XXX
mkdir -p xxx/test
在工作目录下的 xxx 目录中,建立一个名为 test 的子目录若 xxx 目录原本不存在,则建立一个。(注:本例若不加-p 参数,且原本 xxx目录不存在,则产生错误。)
4.创建文件用什么命令?
vi或vim
vi file1.txt #直接创建并打开一个文件file1.txt
touch
touch file2.txt #创建新的空文件file2.txt
echo
echo "this is a new file" > file3.txt #创建文件file3.txt并将this is a newfi1e写入(说明:使用>指令覆盖文件原内容并重新输入内容,若文件不存在则创建文件。)
echo "add contents" >> file3.txt #在已存在的文件补充写入新内容add contents(说明:使用>>指令向文件追加内容,原内容将保存。)
less、more、cat
三者都是将文件内容输出到标准输出,其中less和more可以分页显示,cat是显示全部。
三者可以根据已经存在的文件创建新的文件。假设已经存在文件1.txt。
cat 1.txt > 2.txt
less 1.txt > 3.txt
more 1.txt > 4.txt
cd
cd >> file3.txt #创建新的空文件file3.txt
cd >> file4.txt #创建新的空文件file4.txt
cd最主要的作用是切换目录,在cd后面跟>或>>再加上文件名就可以创建一个内容为空的文件。它和echo的区别之处在于echo可写文件内容,而cd并不能。
5.复制文件用什么命令?
cp -r test/ test1
-r
的作用:
递归复制:
如果 test
是一个目录,那么 -r
表示将 test
目录中的所有内容,包括子目录和文件,一并复制到 test1
中。
没有 -r
时,cp
不能直接复制目录,会报错。
保留结构:
使用 -r
时,复制的文件和目录结构会保持与源目录一致。
6.查看文件内容有哪些命令可以使用?
vi 文件名#编辑方式查看,可修改
cat 文件名 #显示全部文件内容
more 文件名 #分页显示文件内容
less 文件名 #与 more 相似,更好的是可以往前翻页
tai1 文件名 #仅査看尾部,还可以指定行数
head 文件名 #仅查看头部,还可以指定行数
7.怎么向屏幕输出带空格的字符串,比如“hello world"?
echo hello world
8.移动文件用哪个命令?改名用哪个命令?
mv source_file(文件) dest_file(文件) #将源文件名 source_file 改为目标文件名dest_file
mv source_fi1e(文件) dest_directory(目录) #将文件 source_file 移动到目标目录dest_directory中
移动文件到其他目录:
mv file.txt /home/user/Documents/
移动整个目录:这个my_folder是个目录
mv my_folder /home/user/Backup/
重命名文件:
mv old_name.txt new_name.txt
重命名目录:
mv old_folder new_folder
9.删除文件用哪个命令?如果需要连目录及目录下文件一块删除呢?删除空文件夹用什么命令?
删除目录及其内容:rm -r 我们常说的 rm -rf * 删库跑路 也就是这个哈哈。。
rm -rf [目录名或文件名]
10.查找文件内容用哪个命令? *
这个命令是我们嵌入式工作中经常用到的,如下为范例:
grep test *file #在当前目录中,查找后缀有 fi1e 字样的文件中包含 test 字符串的文件,并
打印出该字符串的行
grep -r update /etc/acpi #査找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件
grep -v test *test*grep #查找文件名中包含 test 的文件中不包含test 的行
如下为实例:
在当前目录查找
grep -r "LCD_driver" .
在整个目录及子目录中搜索:
grep -r "LCD_driver" /path/to/directory
仅输出文件名而不显示内容:
grep -rl "LCD_driver" /path/to/directory
忽略大小写搜索:
grep -i "lcd_driver" *.c
11.查找文件用哪个命令? *
这个也是我们工作常用的了。
find . -type f -name "*lcd_drivce*" # 指定查找类型为普通文件(f 表示文件)
find . -type d -name "*lcd_drivce*" # 查找目录
find . -name "*.c" #将当前目录及其子目录下所有文件后缀为.c的文件列出来
find . -ctime -20 #将当前目录及其子目录下所有最近20天内更新过的文件列出
12.cat命令
cat -n textfile1
#把 textfile1 的文档内容加上行号后输入到屏幕
cat -n textfilel> textfile2
#把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里
cat -b textfilel textfile2 >> textfile3
#把 textfilel 和 textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里
cat /dev/nu1l>/etc/test.txt
#清空 /etc/test.txt 文档内容
13.预处理
gcc -E test.c -o test.i #把预处理的结果导出到test.i文件
14.编译为汇编代码
gcc -S test.i -o test.s #编译器将test.i翻译成汇编语言,并将结果存储在test.s文件中。
15.汇编
gcc -c test.s -o test.o #将汇编代码编译为目标文件(.0)但不链接
16.链接
gcc test.o -o test #将生成的目标文件test.o生成最终的可执行文件test
17.一步到位编译
gcc test.c -o test #将源文件test.c编译链接为可执行文件test
18.多文件编译
gcc test1.c test2.c -o test
19.警告处理
gcc -w test.c -o test # 忽略编译时的警告
gcc -wa11 test.c -o test # 编译后显示所有警告
gcc -werror test.c -otest # 在产生警告的地方停止编译
20.常用的GDB调试指令
21.加载/卸载驱动
insmod/modprobe
rmmod
加载驱动模块:
insmod <模块名.ko>
例:insmod my_driver.ko
需要确保模块文件在当前路径或提供完整路径。
卸载驱动模块:
rmmod <模块名>
例:rmmod my_driver
自动加载驱动模块:
modprobe <模块名>
例:modprobe my_driver
会根据依赖关系自动加载所需模块。
22.Linux驱动如何查看驱动模块中打印信息?
dmesg
使用 dmesg
查看内核日志:
dmesg | grep <关键字>
例:查看包含 "my_driver" 的日志:
dmesg | grep my_driver
实时查看内核打印信息:
tail -f /var/log/kern.log
journalctl -k -f
在驱动代码中打印信息: 驱动程序中可以通过 printk
打印信息:
printk(KERN_INFO "This is a debug message: %d\n", value);
23.如何查看内核中已有的字符设备的信息?
lsmod 和modprobe,lsmod可以查看模块的依赖关系,modprobe在加载模块时会加载其他依赖的模块。
查看字符设备的主次设备号:
cat /proc/devices
查看所有设备文件:
ls -l /dev
匹配特定字符设备:
ls -l /dev | grep <设备名>
24.如何查看正在使用的有哪些中断号?
cat /proc/interrupt
CPU0 CPU1
0: 100000 150000 IO-APIC-edge timer
1: 3000 2000 IO-APIC-edge i8042
9: 0 0 IO-APIC-fasteoi acpi
第一列:中断号。
第二、三列:各 CPU 上的中断计数。
最后一列:中断所属的设备名称。
实时查看中断变化:
watch -n 1 cat /proc/interrupts