Linux驱动学习笔记(零)

基础知识

1.三个文件:引导程序(bootloader):uboot.bin/uboot.imx;Linux内核镜像:zImage;文件系统镜像:system.img/rootfs.tar.ba2

2.Linux驱动架构经历了三个阶段,首先是Linux v2.4之前的原始架构:

然后是从Linux v2.6开始的平台总线架构,如下图所示:

最后是当前的设备树架构:

3.打开终端会出现形如saj@dev:~$的命令提示符,各部分含义如下:

  • saj:"@"符号的左侧,它表示的是当前登录用户。
  • @:分隔符号,可理解为at,表示saj用户at主机dev上。
  • dev:当前系统的主机名。
  • ":":分隔符号。
  • "~":冒号后表示用户当前所在的目录,此处的波浪线表示当前用户的家目录,即"~"的含义为/home/saj目录。
  • "":命令提示符,Linux用这个符号标识登录的用户权限等级。如果是超级用户,提示符就是"#",如果是普通用户,提示符就是""。

4.用户登录时,系统会先根据用户名去/etc/passwd文件中查找相应的UID,然后根据UID去/etc/group文件中查找用户所在GID,然后去/etc/shadow文件中核对用户密码,如果上述每一步都成功,则用户登录成功。/etc/passwd文件中信息格式为:用户:密码(x):UID:GID:用户信息说明栏:用户家目录:用户默认shell,其中密码部分并没有提供密码,只是一个x,密码加密存储在/etc/shadow文件中,示例如下:

/etc/group文件中信息格式为:组名:群组密码:GID:此群组包含的账号名称,示例如下:

/etc/shadow文件中信息格式为:用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段,最后一次修改时间是以自1970年1月1日起的天数为单位,示例如下:

对于UID,一般有以下约定:管理员(root)的UID为0;系统用户,即管理系统运行服务的用户的UID为1~999;普通用户,即只具有系统一部分权限的用户的UID为1000以上。

5.df命令用于显示文件系统的磁盘空间使用情况。它显示每个已挂载文件系统的总空间、已用空间、可用空间以及挂载点。下面是df的基本用法和常用选项:df 选项 文件或挂载点。如果直接输入df而不加选项,它将显示所有挂载文件系统的空间使用情况。下面是该命令的一些选项:-h(human-readable)以易读的方式显示磁盘使用情况(自动换算成KB、MB、GB等);-T显示文件系统的类型(例如ext4、xfs、tmpfs);-i显示inode使用情况,而不是磁盘空间使用情况;-a:显示所有文件系统,包括系统自动创建的特殊文件系统(如/proc、/dev等)。

6.du 命令用于显示目录或文件的磁盘使用情况。它可以递归地遍历目录,显示每个目录或文件所占的空间大小。下面是du的基本用法和常用选项:du 选项 目录或文件,若不带参数,du命令默认会对当前目录进行操作。下面是该命令的一些选项:-a(all):显示目录中每个文件和子目录的大小。默认情况下,du只显示每个目录的大小,而不显示每个文件的大小;-h(human-readable):以易读的方式显示文件和目录大小(自动换算成KB、MB、GB等);-s(summary):只显示指定目录或文件的总大小,而不是列出每个子目录;-d<层级数>:指定目录深度,显示特定深度的目录大小。

7.!!命令用于重复执行上一条命令,它等价于再次输入上一条命令,尤其在需要重新执行一条较长的命令时很有用。还可以使用sudo !!以管理员权限重新执行上一条命令。

8.mount 命令用于将文件系统挂载到特定的目录:mount 选项 <设备> <挂载点>,直接输入mount将列出所有当前挂载的文件系统。卸载已挂载的文件系统时使用 umount 命令,该命令用于安全地断开设备和系统之间的连接,以确保数据不会因强制断开而丢失:umount 选项 <挂载点或设备>。

9.type命令用于显示给定命令的类型,告诉你该命令是一个内置命令、外部程序、别名或函数。它可以帮助了解命令的来源,以及系统如何解析命令的执行路径。内置命令是由 shell 本身提供和管理的命令。这些命令在shell启动时加载,直接在shell内部执行,因此执行时非常快速。外部程序是存储在文件系统中的可执行文件,通常位于某些目录中(如/bin, /usr/bin)。外部程序是通过启动一个新进程来执行的,shell会根据命令名称查找相应的可执行文件,并启动一个新的进程来执行该文件。/etc/shells文件是一个文本文件,用于列出系统上可用的合法shell程序路径。通常,它包含系统允许用户使用的所有shell程序的路径,并且每一行列出一个shell的完整路径。

10.vim和vi的区别:vim是vi的升级版本,vi按u只能撤销上一次的操作,而vim可以无限制撤销;vi只能运行在类unix系统中,而vim可以运行于多个平台;vim可以用不同颜色来高亮代码;vim可通过vimrc文件配置更高级的功能。

11.在 Shell 中,脚本可以通过以下三种方式启动,每种方式的行为和影响范围不同:1将脚本设置为可执行,然后直接运行脚本路径;2显式指定解释器(如 /bin/bash 或 /bin/sh)运行脚本;3使用source或.命令加载脚本。三种方式的区别可以总结如下:直接执行需要赋予脚本执行权限并依赖脚本顶部的Shebang指定解释器,它会在一个新的子Shell中运行,当前环境不受影响;指定解释器执行(如bash script.sh)不需要执行权限和Shebang,同样会在子Shell中运行,对当前环境也无影响;而source或.执行则直接在当前Shell中运行脚本,修改脚本中的变量和环境会影响当前Shell,因此通常用于加载环境配置或定义函数。

12.shell的基本语法:定义变量variable=value、variable='value'、variable="value",使用变量variable、(variable);将命令的结果赋值给变量:variable=`command`、variable=$(command)。上述内容区别如下:

unset用来删除变量。在Shell脚本中,有许多特殊变量用于表示脚本的状态、参数、PID等信息。以下是Shell中所有常用的特殊变量及其含义:

其中,在for循环中,"\*"会将所有参数合并成一个字符串作为一个单独的迭代项;而"@"会将每个参数作为独立的迭代项。因此,"\*"适合将所有参数作为整体处理,而"@"适合逐一处理每个参数。(())是一种用于在Shell脚本中进行算术运算的语法。它用于表达式求值,并返回结果。(())主要用于整数运算,支持加法、减法、乘法、除法、取余、位运算等操作。test和\[\]用于检测某个条件是否成立。

13.export命令在shell中用于设置环境变量并使其对当前shell会话及其子进程可见。当通过export设置一个变量时,变量的值不仅在当前shell内部有效,还能被该shell启动的子进程访问,常用于设置环境变量(如PATH、HOME)或配置程序运行环境。若不使用export,变量仅对当前shell有效,子进程无法继承,可以通过export来修改环境变量,确保子进程共享特定的配置或信息。export命令导出的环境变量仅在当前shell会话中有效,当退出当前shell时,所有在该会话中设置的环境变量都会失效,不再可用,也就是说环境变量不会被保留到下次启动的shell中。

14.与Bash Shell有关的配置文件主要有:/etc/profile、/etc/bashrc、/etc/bash.bashrc、/etc/profile.d/*.sh、~/.bashrc、~/.profile、~/.bash_login、~/.bash_profile,这些配置文件的具体命名还和具体的linux系统有关,例如对于ubuntu,一般有/etc/profile、/etc/bash.bashrc、/etc/profile.d/*.sh、~/.profile、~/.bashrc,系统启动时会按照/etc/profile->~/.profile的顺序执行这些配置文件,/etc/profile中会调用/etc/bash.bashrc和/etc/profile.d/*.sh,如下图:

~/.profile文件会调用~/.bashrc。/etc目录下的配置文件是所有用户共享的,如果想设置所有用户共享的环境变量,可以将其放在/etc/bash.bashrc文件中,/etc目录下的配置文件在任何用户登录时(例如在终端中切换到任意用户)都会被执行。家目录下的配置文件是属于单个用户的,只有在对应用户登录时才会被执行,可以在~/.bashrc文件中设置只针对当前用户的环境变量。

15.deb包:Debian、Ubuntu、Deepin等linux发行版的软件安装包。dpkg工具可用来管理deb包,其常用命令如下:sudo dpkg -i package_name.deb:该命令用于安装指定的.deb包。安装过程中,dpkg会检查包的依赖关系,但不会自动解决依赖问题;sudo dpkg -r package_name:删除指定的软件包,但不会删除配置文件;sudo dpkg --purge package_name:删除软件包及其配置文件;dpkg -s package_name:显示指定已安装包的详细信息,包括版本、描述、依赖关系等;dpkg -L package_name:显示指定包中包含的所有文件安装的完整路径。在.deb包的结构中,DEBIAN目录包含一些用于包管理和安装过程的控制文件:control文件:包含包的基本信息,如包名、版本、依赖关系、描述等,它是.deb包的核心元数据文件;preinst文件:在包安装之前执行的脚本,用于做一些安装前的准备工作,例如检查系统状态、处理配置文件等,如果文件存在,它会在dpkg安装包前执行;postinst文件:包安装后执行的脚本;prerm文件:在包卸载之前执行的脚本;postrm文件:在包卸载之后执行的脚本;copyright文件:提供有关该软件包的版权信息、许可证以及维护者的相关信息;changelog文件:记录了该软件包的版本历史和每个版本所做的更改。DEBIAN这个目录对每个.deb包来说都是必须的,并且它决定了该包在安装、升级、删除等过程中如何与系统进行交互。创建.deb软件包过程如下:可以创建一个目录,例如helloworld目录,在helloworld目录下创建DEBIAN目录并创建上述DEBIAN目录下的文件,然后在helloworld目录下创建脚本helloworld/usr/bin/helloworld.sh,然后就可以用命令dpkg -b <package_directory> <deb_file>(此处先切换到helloworld目录的上一级目录,然后使用命令dpkg -b helloworld helloworld.sh)构建一个.deb软件包,然后用命令sudo dpkg -i <deb_file>安装,这会将该软件安装到/ usr/bin/helloworld.sh处,安装规则就是将dpkg -b <package_directory> <deb_file>安装命令中的package_directory换成根目录,并将软件安装到对应位置。安装完成后就可以直接使用helloworld.sh命令了。

相关推荐
盐焗鹌鹑蛋12 分钟前
【Linux】权限
linux
caimouse18 分钟前
MM 学习笔记 10:页面文件与系统加载器
笔记·学习·reactos
一只小菜鸡..23 分钟前
南京大学 操作系统 (JYY) 学习笔记:Hello, OS World! (程序的机器视角)
java·笔记·学习
小此方28 分钟前
Re:Linux系统篇(四十六)信号篇·四:一文串联操作系统底层:时钟中断、内核态切换、系统调用与 Linux 信号处理全解析
linux·驱动开发·信号处理
lazy H1 小时前
从入门到日常开发,一篇文章掌握 Git 核心操作
git·后端·学习·github
无人生还别怕2 小时前
如何制作一个linux标准iso镜像
linux·iso·opencloudos·openanolisos
Yana.nice10 小时前
Linux 只保留 30 天内日志(find命令删除日志文件)
linux·运维·chrome
克里斯蒂亚诺更新10 小时前
ruoyi角色权限的对应关系
笔记
a11177613 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao13 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest