嵌入式Linux驱动开发笔记(一)

嵌入式Linux驱动开发笔记(一)

一、Ubuntu系统基础

1.shell

(1)Shell 就是“敲命令” ,严格意义上来讲, Shell 是一个应用程序,它负责接收用户输入的命令,然后根据命令做出 相应的动作, Shell 负责将应用层或者用户输入的命令传递给系统内核,由操作系统内核来完成
相应的工作,然后将结果反馈给应用层或者用户。

(2)常用的Linux系统命令
请添加图片描述

2.APT下载工具

APT 下载工具可以实现软件自动下载、配置、安装二进制或者源码的功能。 APT 下载工具和我们前面讲解的“install”命令结合在一起构成了 Ubuntu 下最常用的下载和安装软件方法。它解决了 Linux 平台下安装软件的一个缺陷,即软件之间相互依赖。

// 更新本地数据库
// 这个命令会访问源地址,并且获取软件列表并保存在本电脑上
sudo apt-get update 
    
// 检查依赖关系
sudo apt-get check

// 软件安装
sudo apt-get install package-name
// 例如:安装Ubuntu下的串口工具“minicom”
sudo apt-get install minicom
  
// 软件更新
sudo apt-get upgrade package-name
    
// 卸载软件
sudo apt-get remove package-name
    
3.vi和vim的使用

(1)安装vim编辑器

sudo apt-get install vim

(2)vim编辑文本

vi test.txt

(3)VIM 编辑器有 3 种工作模式:输入模式、指令模式和底行模式,通过切换不同的模式可以完成不同的功能 。

// 输入模式,切换到输入模式的命令如下(英文字符下的键盘输入):  

i 在当前光标所在字符的前面,转为输入模式。
I 在当前光标所在行的行首转换为输入模式。
a 在当前光标所在字符的后面,转为输入模式。
A 在光标所在行的行尾,转换为输入模式。
o 在当前光标所在行的下方,新建一行,并转为输入模式。
O 在当前光标所在行的上方,新建一行,并转为输入模式。
s 删除光标所在字符。
r 替换光标处字符。
// 指令模式,从输入模式切换到指令模式,方式就是按下键盘的 ESC 键

1、移动光标指令:
h(或左方向键) 光标左移一个字符。
l(或右方向键) 光标右移一个字符。
j(或下方向键) 光标下移一行。
k(或上方向键) 光标上移一行。
nG 光标移动到第 n 行首。
n+ 光标下移 n 行。
n- 光标上移 n 行。
    
2、屏幕翻滚指令
Ctrl+f 屏幕向下翻一页,相当于下一页。
Ctrl+b 屏幕向上翻一页,相当于上一页。
    
3、复制、删除和粘贴指令
cc 删除整行,并且修改整行内容。
dd 删除该行,不提供修改功能。
ndd 删除当前行向下 n 行。
x 删除光标所在的字符。
X 删除光标前面的一个字符。
nyy 复制当前行及其下面 n 行。
p 粘贴最近复制的内容。

// 底行模式,进入底行模式的方式是先进入指令模式下,
// 然后在指令模式下输入“:”进入底行模式(英文字符下的键盘输入):  

x 保存当前文档并且退出。
q 退出。
w 保存文档。
q! 退出 VI/VIM,不保存文档。
wq 退出并保存文本。
    

(4)搜索文本内容

// 在指令模式下输入“/”进入底行模式,在“/”底行模式下我们可以在文本中搜索指定的内容

4.Linux 文件系统

(1)Linux 文件系统类型

在 Windows 下有 FAT、 NTFS 和 exFAT 这样的文件系统 ,Linux 下的文件系统主要有 ext2、 ext3、 ext4 等文件系统 。Linux 还支持其他的 UNIX 文件系统,比如 XFS、 JFS、 UFS 等,也支持 Windows 的 FAT 文件系统和网络文件系统 NFS 等 。

// 查询当前磁盘挂载的文件系统    
df -T -h

请添加图片描述
在 Linux 下一切皆为文件,“/dev/sda1”就是我们的磁盘分区,可以看出这个磁盘分区类型是 ext4,它的挂载点是“/”, 也就是根目录。

// 进入到系统根目录“/”
cd / 
   
// 进入到用户根目录
cd ~

(2)根目录“/”中的一些重要的文件夹:

/bin 存储一些二进制可执行命令文件, /usr/bin 也存放了一些基于用户的命令文件。
/sbin 存储了很多系统命令, /usr/sbin 也存储了许多系统命令。
/root 超级用户 root 的根目录文件。
/home 普通用户默认目录,在该目录下,每个用户都有一个以本用户名命名的文件夹。
/boot 存放 Ubuntu 系统内核和系统启动文件。
/mnt 通常包括系统引导后被挂载的文件系统的挂载点。
/dev 存放设备文件,我们后面学习 Linux 驱动主要是跟这个文件夹打交道的。
/etc 保存系统管理所需的配置文件和目录。
/lib 保存系统程序运行所需的库文件, /usr/lib 下存放了一些用于普通用户的库文件。
/lost+found 一般为空,当系统非正常关机以后,此文件夹会保存一些零散文件。
/var 存储一些不断变化的文件,比如日志文件
/usr 包括与系统用户直接有关的文件和目录,比如应用程序和所需的库文件。
/media 存放 Ubuntu 系统自动挂载的设备文件。
/proc 虚拟目录,不实际存储在磁盘上,通常用来保存系统信息和进程信息。
/tmp 存储系统和用户的临时文件,该文件夹对所有的用户都提供读写权限。
/opt 可选文件和程序的存放目录。
/sys 系统设备和文件层次结构,并向用户程序提供详细的内核数据信息。
5.文件操作命令

(1)创建新文件命令—touch

touch [参数] [文件名]
    
常用的命令参数如下:
-a 只更改存取时间。
-c 不建立任何文件。
-d<日期> 使用指定的日期,而并非现在日期。
-t<时间> 使用指定的时间,而并非现在时间。

(2)文件夹创建命令—mkdir

mkdir [参数] [文件夹名目录名]

主要参数如下:
-p 如所要创建的目录其上层目录目前还未创建,那么会一起创建上层目录。

(3)文件及目录删除命令—rm

rm [参数] [目的文件或文件夹目录名]

命令主要参数如下:
-d 直接把要删除的目录的硬连接数据删成 0,删除该目录。
-f 强制删除文件和文件夹(目录)-i 删除文件或者文件夹(目录)之前先询问用户。
-r 递归删除,指定文件夹(目录)下的所有文件和子文件夹全部删除掉。
-v 显示删除过程
    
-rf 强制递归删除文件夹(目录)

(4)文件夹(目录)删除命令—rmdir

rmdir [参数] [文件夹(目录)]

命令主要参数如下:
-p 删除指定的文件夹(目录)以后,若上层文件夹(目录)为空文件夹(目录)的话就将其一起
删除。

(5)文件复制命令—cp

cp [参数] [源地址] [目的地址]

主要参数描述如下:
-a 此参数和同时指定“-dpR”参数相同
-d 在复制有符号连接的文件时,保留原始的连接。
-f 强行复制文件,不管要复制的文件是否已经存在于目标目录。
-I 覆盖现有文件之前询问用户。
-p 保留源文件或者目录的属性。
-r 或-R 递归处理,将指定目录下的文件及子目录一并处理
    
例:
// 把当前文件夹下所有的.c文件复制到test2文件下
// 通配符“*”,“*.c”就表示当前文件夹下的所有以“.c”结尾的文件
cp *.c ../test2
    

(6)文件移动命令—mv

mv [参数] [源地址] [目的地址]

主要参数描述如下:
-b 如果要覆盖文件的话覆盖前先进行备份。
-f 若目标文件或目录与现在的文件重复,直接覆盖目的文件或目录。
-I 在覆盖之前询问用户。
6.命令行进行文件的压缩和解压缩

命令行下进行压缩和解压缩常用的命令有三个: zip、 unzip 和 tar

(1)zip 压缩命令

zip [参数] [压缩文件名.zip] [被压缩的文件]

主要参数函数如下:
-b<工作目录> 指定暂时存放文件的目录。
-d 从 zip 文件中删除一个文件。
-F 尝试修复已经损毁的压缩文件。
-g 将文件压缩入现有的压缩文件中,不需要新建压缩文件。
-h 帮助。
-j 只保存文件的名,不保存目录。
-m 压缩完成以后删除源文件。
-n<字尾符号> 不压缩特定扩展名的文件。
-q 不显示压缩命令执行过程。
-r 递归压缩,将指定目录下的所有文件和子目录一起压缩。
-v 显示指令执行过程。
-num 压缩率,为 1~9 的数值。
    
例:
// -rv 表示递归压缩并且显示压缩命令执行过程
zip -rv test2.zip test2

(2)unzip 解压缩命令

zip [参数] [压缩文件名.zip] [被压缩的文件]

unzip [参数] [压缩文件名.zip]
主要参数如下:
-l 显示压缩文件内所包含的文件。
-t 检查压缩文件是否损坏,但不解压。
-v 显示命令显示的执行过程。
-Z 只显示压缩文件的注解。
-C 压缩文件中的文件名称区分大小写
-j 不处理压缩文件中的原有目录路径。
-L 将压缩文件中的全部文件名改为小写。
-n 解压缩时不要覆盖原有文件。
-P<密码> 解压密码。
-q 静默执行,不显示任何信息。
-x<文件列表> 指定不要处理.zip 中的哪些文件。
-d<目录> 把压缩文件解到指定目录下。

(3)命令 tar

前面讲的 zip 和 unzip 这两个是命令只适用于.zip 格式的压缩和解压,其它压缩格式就用不了了,比如 Linux 下最常用的.bz2 和.gz 这两种压缩格式。其它格式的压缩和解压使用命令tar, tar 将压缩和解压缩集合在一起,使用不同的参数即可.

常用参数如下:

-c 创建新的压缩文件。
-C<目的目录> 切换到指定的目录。
-f<备份文件> 指定压缩文件。
-j 用 tar 生成压缩文件,然后用 bzip2 进行压缩。
-k 解开备份文件时,不覆盖已有的文件。
-m 还原文件时,不变更文件的更改时间。
-r 新增文件到已存在的备份文件的结尾部分。
-t 列出备份文件内容。
-v 显示指令执行过程。
-w 遭遇问题时先询问用户。
-x 从备份文件中释放文件,也就是解压缩文件。
-z 用 tar 生成压缩文件,用 gzip 压缩。
-Z 用 tar 生成压缩文件,用 compress 压缩。
例:使用tar压缩
// 使用如下两个命令将 test1 文件夹压缩为.bz2 和.gz 这两个格式
// -vcjf 表示创建 bz2 格式的压缩文件, -vczf 表示创建.gz 格式的压缩文件  
tar -vcjf test1.tar.bz2 test1
tar -vczf test1.tar.gz test1
    
例:使用tar解压
// 使用如下所示两行命令完成.bz2 和.gz 格式文件的解压缩
// -vxjf 用来完成.bz2 格式压缩文件的解压, -vxzf 用来完成.gz 格式压缩文
件的解压
tar -vxjf test1.tar.bz2 
tar -vxzf test1.tar.gz 
    
7.文件查询和搜索

在嵌入式 Linux 开发中常常需要在 Linux 源码文件中查询某个文件是否存在,或者搜索哪些文件都调用了某个函数等等。常用的文件查询和搜索命令: find 和 grep。

(1)命令 find

find 命令用于在目录结构中查找文件,其命令格式如下:
    
find [路径] [参数] [关键字]
路径是要查找的目录路径,如果不写的话表示在当前目录下查找,关键字是文件名的一部
分,主要参数如下:
-name<filename> 按照文件名称查找,查找与 filename 匹配的文件,可使用通配c符。
-depth 从指定目录下的最深层的子目录开始查找。
-gid<群组识别码>查找符合指定的群组识别码的文件或目录。
-group<群组名称> 查找符合指定的群组名称的文件或目录。
-size<文件大小> 查找符合指定文件大小的文件。
-type<文件类型> 查找符合指定文件类型的文件。
-user<拥有者名称> 查找符合指定的拥有者名称的文件或目录。
    
例:   
// 搜索目录/etc 中以“vim”开头的文件为例
find /etc/ -name vim*

(2)命令 grep

grep 命令用于查找包含指定关键字的文件,如果发现某个文件的内容包含所指定的关键字, grep 命令就会把包含指定关键字的这一行标记出来 。

grep 命令格式如下:

grep [参数] 关键字 文件列表
grep 命令一次只能查一个关键字,主要参数如下:
-b 在显示符合关键字的那一列前,标记处该列第 1 个字符的位编号。
-c 计算符合关键字的列数。
-d<进行动作> 当指定要查找的是目录而非文件时,必须使用此参数!否则 grep 指令
将回报信息并停止搜索。
-i 忽略字符大小写。
-v 反转查找,只显示不匹配的行。
-r 在指定目录中递归查找。
8.文件类型

在用户根目录下使用命令“ls -l”来查看用户根目录下所有文件的详细信息
请添加图片描述
每个文件的详细信息占一行,每行最前面的符号标记了当前文件类型,比如 test1 的第一个字符是“d”, test1.tar.bz2 文件第一个字符是“-”。

这些字符表示的文件类型如下:

- 普通文件,一些应用程序创建的,比如文档、图片、音乐等等。
d 目录文件。
c 字符设备文件, Linux 驱动里面的字符设备驱动,比如串口设备,音频设备等。
b 块设备文件,存储设备驱动,比如硬盘, U 盘等。
l 符号连接文件,相当于 Windwos 下的快捷方式。
s 套接字文件。
p 管道文件,主要指 FIFO 文件。

总结:学习 Linux 驱动开发的时候基本是在和字符设备文件和块设备文件打交道。

9.权限管理命令

对于一个文件通常有三种权限:读®、写(w)和执行(x)

我们可以使用 Shell 来操作文件的权限管理,主要用到“chmod”和“chown”这两个命令。

(1)权限修改命令 chmod

命令“chmod”用于修改文件或者文件夹的权限,权限可以使用前面讲的数字表示也可以使用字母表示,命令格式如下:

chmod [参数] [文件名/目录名]

主要参数如下:
-c 效果类似“-v”参数,但仅回显更改的部分。
-f 不显示错误信息。
-R 递归处理,指定目录下的所有文件及其子文件目录一起处理。
-v 显示指令的执行过程。

“-rw-rw-r–”表示文件权限与用户和用户组之间的关系,第一位表示文件类型,剩下的 9 位以 3 位为一组,分别表示文件拥有者的权限,文件拥有者所在用户组的权限以及其它用户权限。

例:
// 修改文件 test 的权限为 766,修改完成以后的 test 文件权限为“rwxrwrw-”  
chmod 766 test.txt

// 给文件test.c的归属用户添加可执行权限
chmod u+x test.c

(2)文件归属者修改命令 chown

命令 chown 用来修改某个文件或者目录的归属者用户或者用户组,命令格式如下:

chown [参数] [用户名.<组名>] [文件名/目录]
其中[用户名.<组名>]表示要将文件或者目录改为哪一个用户或者用户组,用户名和组名用
“.”隔开,其中用户名和组名中的任何一个都可以省略,命令主要参数如下:
-c 效果同-v 类似,但仅显示更改的部分。
-f 不显示错误信息。
-h 只对符号连接的文件做修改,不改动其它任何相关的文件。
-R 递归处理,将指定的目录下的所有文件和子目录一起处理。
-v 显示处理过程。
10.Linux 磁盘管理

常用磁盘管理命令如下:

(1)磁盘分区命令 fdisk

如果要对某个磁盘进行分区,可以使用命令 fdisk,命令格如下:
fdisk [参数]
主要参数如下:
-b<分区大小> 指定每个分区的大小。
-l 列出指定设备的分区表。
-s<分区编号> 将指定的分区大小输出到标准的输出上,单位为块。
-u 搭配“-l”参数,会用分区数目取代柱面数目,来表示每个分区的起始地址
   

例:

// 比如要对 U 盘进行分区,可以使用如下命令
sudo fdisk /dev/sdb

输入“m”可以查看帮助,因为 fdisk 还有一些子命令,通过输入“m”可以查看都有哪些子命令

常用的命令如下:
    
p 显示现有的分区
n 建立新分区
t 更改分区类型
d 删除现有的分区
a 更改分区启动标志
w 对分区的更改写入到硬盘或者存储器中。
q 不保存退出。

(2)格式化命令 mkfs

使用命令 fdisk 创建好一个分区以后,我们需要对其格式化,也就是在这个分区上创建一个文件系统, Linux 下的格式化命令为 mkfs,命令格式如下:

mkfs [参数] [-t 文件系统类型] [分区名称]
主要参数如下:
fs 指定建立文件系统时的参数
-V 显示版本信息和简要的使用方法。
-v 显示版本信息和详细的使用方法。
    
例:
// 比如我们要格式化 U 盘的分区/dev/sdb1 为 FAT 格式,那么就可以使用如下命令:
mkfs – t vfat /dev/sdb1
    

(3)挂载分区命令 mount

磁盘挂载命令为 mount,命令格式如下:

mount [参数] -t [类型] [设备名称] [目的文件夹]
命令主要参数有:
-V 显示程序版本。
-h 显示辅助信息。
-v 显示执行过程详细信息。
-o ro 只读模式挂载。
-o rw 读写模式挂载。
-s-r 等于-o ro。
-w 等于-o rw。

挂载点是一个文件夹,因此在挂载之前先要创建一个文件夹,一般我们把挂载点放到“/mnt”目录下,在“/mnt”下创建一个 tmp 文件夹,然后将 U 盘的/dev/sdb1 分区挂载到/mnt/tmp 文件夹里面。

(4)卸载命令 umount

通过 umount 将其从卸载点卸除,命令格式如下:

umount [参数] -t [文件系统类型] [设备名称]
-a 卸载/etc/mtab 中的所有文件系统。
-h 显示帮助。
-n 卸载时不要将信息存入到/etc/mtab 文件中
-r 如果无法成功卸载,则尝试以只读的方式重新挂载。
-t<文件系统类型> 仅卸载选项中指定的文件系统。
-v 显示执行过程

猜你喜欢

转载自blog.csdn.net/WalterBrien/article/details/125111053