ARM & Linux 基础学习记录
注:在 Github 上的原版文章日后可能会更新,但这里不会跟进。文章的 Gitee 仓库地址,Gitee 访问更流畅。
目录
目录
ARM & Linux 基础学习记录
目录
Linux 一般开发步骤
Linux OS 相关
Linux 文件系统
Linux 系统相关概念
Linux Shell
Linux 下的开发
GCC 命令详情
Makefile 简述和模板
Ubuntu 下的包管理 / apt工具
Linux 驱动和应用的体验
Ubuntu 主机 的配置工作
获取交叉编译工具链
第一个应用
第一个驱动
学至此的一点启示
构建系统简约步骤
PC 与 嵌入式板 传输文件的方式汇总(日常补充)
络传输:ETH/WiFi
USB 传输
串口传输:rz/sz 命令
Linux 一般开发步骤
p.s 本应放在最后,刻意写在前头。
Bootloader、Linux 内核、根文件系统、APP 等等软件,需要在 Ubuntu 中编译;但是阅读、修改这些源码时,在 Windows 下会比较方便。
所以工作日常开发流程如下:
PC 端,使用 source insight 编、改源码 —>传—> Ubuntu 端,对修改好的源码进行编译、制作 —>下载—> 嵌入式板端,在 Linux 板子上运行、测试。
分步来说就是:
-
在 Windows 上阅读、研究、修改,修改后,上传(推荐 FileZilla)到 Ubuntu ;
-
在 Ubuntu 上编译、制作(推荐使用 MobaXterm 通过 SSH 远程登陆 Ubuntu);
-
把制作好的可执行程序下载到开发板上运行、测试。
u-boot、Linux内核,在 Windows 和 Ubuntu 各存一份。根文件系统使用 buildroot (或 Busybox 或 Yocto)制作,它无需放在 Windows 上。
Linux OS 相关
p.s 关于在 VM 虚拟机中安装 Linux 发行版系统和在 PC上安装 Linux 发行版系统,用时再在 上随用随查。
p.s 若仅用于开发或者只使用命令行的形式,一般在 MobaXterm 或者 Xshell 中使用 SSH 连接 Linux 系统(如 Ubuntu)来进行系统操作。
p.s 鼠标退出 VM ,按 ctrl + alt。
参考 搜教程的总目录 Linux 教程 | 菜鸟教程 (runoob.com),Linux学习教程,Linux入门教程(超详细) (biancheng.net)。Linux 系统启动过程 | 菜鸟教程 (runoob.com)。
VM 虚拟机推荐安装 Ubuntu-18.04, 搜教程很多,安装好之后,要再执行结果必要的步骤:
Linux 文件系统
文件目录
Ubuntu 中的目录遵循 FHS 标准(Filesystem Hierarchy Standard, 文件系统层次标准)。它定义了文件系统中目录、文件分类存放的原则、定义了系统运行所需的最小文件、目录的集合,并列举了不遵循这些原则的例外情况及其原因。 FHS 并不是一个强制的标准,但是大多的 Linux、 Unix 发行版本遵循 FHS。
这些目录简单介绍如下。
-
Linux 系统目录结构 | 菜鸟教程 (runoob.com)。Linux文件系统的层次结构 (biancheng.net)。
-
Linux绝对路径和相对路径详解 (biancheng.net),Linux文件(目录)命名规则 (biancheng.net)。
文件属性
终端中执行 “ls -al” 命令则给出每个文件完整属性信息。文件属性示意图如下 。
-
第一个字符表示“文件类型”,文件类型可以是目录、文件或链接文件等。如下表所示。
d | 目录 |
---|---|
– | 文件 |
l | 链接文件 |
b | 设备文件里的可供存储的接口设备 |
c | 设备文件里的串行端口设备,如鼠标、键盘等 |
-
文件类型后面的 9 个字符以 3 个为一组:
-
第一组表示 “文件所有者的权限”;
-
第二组表示 “用户组的权限”;
-
第三组表示 “其他非本用户组的权限”,即其它所有人的权限。
每组都是 rwx 的组合, 其中 r 代表可读, w 代表可写, x 代表可执行; 如果没有对应的权限,就会出现减 。
-
-
连接数: 表示有多少文件名连接到此节点。
-
文件所有者:表示这个文件的 “所有者的账 ”。
-
文件所属用户组。
-
文件大小:表示这个文件的大小,默认单位是 B(字节)。
-
文件最后被修改的时间: 这个文件的创建文件日期或者是最近的修改日期。
-
文件名:对应文件的文件名。
文件/目录管理 和 更改文件属性/权限 等 参看一节。
Linux 系统相关概念
-
Linux 系统启动过程 | 菜鸟教程 (runoob.com)。
-
Linux系统相关的基础问题(空间、内存、库、链接、环境变量)_~青萍之末~的博客-CSDN博客。
-
Linux系统调用~青萍之末~的博客-CSDN博客linux系统调用。
-
Linux内核的五大模块~青萍之末~的博客-CSDN博客linux内核模块,进程调度,进程间通信模块(包括管道、命名管道、消息队列、信 量和共享内存等),内存管理模块,文件系统模块, 络接口模块。
-
etc.
Linux Shell
概况
Shell 的意思是“外壳”,在 Linux 中它是一个程序,比如 /bin/sh、 /bin/bash 等。它负责接收用户的输入,根据用户的输入找到其他程序并运行。比如我们输入“ ls”并回车时, shell 程序找到“ ls”程序并运行,再把结果打印出来。Shell 有很多种实现,我们常用 bash。
命令提示符如下图。
根目录: “/” ;家目录: “~” ;上一级目录: “..” ;当前目录: “.” ;上一次目录:”-“。执行当前目录的 “app” 应用程序: “./app” 。
绝对路径从 根目录 “/” 开始写起,相对目录从当前所在目录 “.” 开始写起。
常用命令
-
Linux 命令查询,当字典用。
-
Linux 命令大全 – 菜鸟教程。
-
Linux命令搜索引擎 命令,Linux Linux命令搜索引擎 命令详解:最专业的Linux命令大全,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。 – Linux 命令搜索引擎 (wangchujiang.com),开源地址 jaywcjlove/linux-command: Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux (github.com)。
-
本地离线文档资料 Linux 命令速查:。
-
Linux大神都是怎么记住这么多命令的- 知乎 (zhihu.com)。
-
-
Shell 教程 – 菜鸟教程,Shell脚本:Linux Shell脚本学习指南(超详细) (biancheng.net)。
快捷键 / 通配符 / 流重定向 / 管道
-
Linux 图形界面中(比如 Ubuntu 图形界面中),按下 打开终端。
-
命令的 惯例选项 的含义:以下命令的多个选项可以任意按需组合。
-
-a 表含隐藏文件;
-
-r 表文件夹内遍历所有文件;
-
-h 容量以方便识别的形式打印(如容量大小以 K/M/G 单位显示);
-
-i 执行例外操作前会询问,加上比较保险;
-
-v 显示版本;
-
–help 显示帮助;
-
等等。
-
-
快捷键:
-
ctrl + c,结束当前进程。
-
ctrl + z,暂停当前进程,可使用 命令 恢复,详见 “任务后台执行 / 任务&进程查看” 一节。
-
ctrl + a,使光标移动到命令行的最前,对于长命令可以快速定位到最前。
-
ctrl + e,使光标移动到命令行的最后。
-
ctrl + d,退出当前终端,关闭,作用与 一样。
-
-
多个命令写在一行并自动逐个执行,命令之间加 && 符 。
-
tab 键自动补全命令和文件或目录的全名。输入路径全名的中途,按两下 tab 键显示当前目录下的内容。
-
各种通配符:
-
*:任何字符和字符串。
-
一个任意字符。
-
[abc…]: [ ] 内的任意一个字符。 [abc]表示 a、 b、 c 任一个字符;有时候也表示范围,如 [a-x] ,表示 a 到 x 的任一个字符; [1-9] 表示 1 到 9 的任一数字。
-
[!abc…]:和上面的相反,表示除 [ ] 内的字符外的任意一个字符。
例 删除名字中第一个字符是 “1” 而第二个字符不是为 “1” 的所有文件。
-
-
流控制,输入输出重定向(< / <<,> / >>):Shell 输入/输出重定向 | 菜鸟教程 (runoob.com)。
-
,将输出重定向到 file(一个文件),即将 stdout 重定向到 file,将 command 的打印内容覆盖输入到文件 file 里;,将输出以追加的方式重定向到 file,追加输入到文件 file。
-
,将输入重定向到 file,即将 stdin 重定向到 file,本来需要从键盘获取输入的命令会转移到读取文件内容。
-
注意 输出重定向是大于 (>),输入重定向是小于 (<)。
-
错误信息重定向:
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
-
标准输入文件(stdin):stdin 的文件描述符为 0,Unix 程序默认从 stdin 读取数据。
-
-
标准输出文件(stdout):stdout 的文件描述符为 1,Unix 程序默认向 stdout 输出数据。
-
标准错误文件(stderr):stderr 的文件描述符为 2,Unix 程序会向 stderr 流中写入错误信息。
让执行命令后的错误信息 stderr 追加到 file 文件末尾。
-
-
-
管道( | ):
,当在两个 命令/应用/进程 之间设置管道时,管道符左边命令的输出就变成了右边命令的输入(管道 即进程间通讯的一种)。
这里需要注意,command1 必须有正确输出,而 command2 必须可以处理 command1 的输出结果; command2 只能处理 command1 的正确输出结果,不能处理 command1 的错误信息。
例:查看指定程序的进程运行状态,并将输出重定向到文件中。
基本命令 / 文件&目录管理
基本命令
、、(-p 选项指示连续创建目录及其子目录,如)、(不能删除非空目录,-p 选项可以一次删除多级空目录)、、、(往文件写内容 )。
文件与目录管理
Linux 文件与目录管理 | 菜鸟教程 (runoob.com)。
ls(英文全拼:list files): 列出目录及文件名
cd(英文全拼:change directory):切换目录
pwd(英文全拼:print work directory):显示目前的目录
mkdir(英文全拼:make directory):创建一个新的目录
rmdir(英文全拼:remove directory):删除一个空的目录
cp(英文全拼:copy file): 复制文件或目录
rm(英文全拼:remove): 删除文件或目录
mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
显示目录文件和文件夹:ls
-l 显示完整属性信息;-a 显示隐藏文件;-h 文件和文件夹大小以 K/M/G 单位显示;-i参数显示文件的inode节点信息。一个例子如图。
统计目录每个文件大小:du
统计指定目录内每个文件和文件夹大小:。-a 表显示隐藏文件,-h 表大小以 K/M/G 单位显示。
显示指定文件所占空间:
复制 文件或文件夹:cp
-
-r 表示递归目录下所有文件。
-
-d 如果源文件为链接文件,只复制链接文件而不是实际文件。
-
-i 增加特殊情况的讯问,如同名时会询问是否覆盖等(个人建议常用)。
-
-f 强制覆盖。
额外选项:
-
-l:进行硬连结(hard link)的连结档创建,而非复制文件本身。
-
-s:复制成为符 连结档 (symbolic link),亦即 快捷方式文件。
-
-p:连同文件的属性一起复制过去,而非使用默认属性(备份常用)。
-
-a:相当於 -pdr,递归复制,并将文件属性和链接文件一同复制过去。
例子:
-
拷贝 dir1 目录内所有文件到 dir2 目录: 或者 。
-
复制 整个目录 到 另一个目录 时常用:。
关于 硬链接 和 符 链接:
引自:Linux 文件与目录管理 | 菜鸟教程 (runoob.com)。
Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符 链接(Symbolic Link)。默认情况下,ln 命令产生硬链接。
硬连接
硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编 ,称为索引节点 (Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点 与 B 的目录项中的 inode 节点 相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。
硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
软连接
实验
从上面的结果中可以看出,硬连接文件 f2 与原文件 f1 的 inode 节点相同,均为 9797648,然而符 连接文件的 inode 节点不同。
可以得到以下预期与测试的结果:
1).删除符 连接f3,对f1、f2无影响;
2).删除硬连接f2,对f1、f3也无影响;
3).删除原文件f1,对硬连接f2没有影响,导致符 连接f3失效;
4).同时删除原文件f1,硬连接f2,整个文件会真正的被删除。
移动/重命名 文件/文件夹:mv
-
-f 强制;-i 询问(个人建议常用)。
直接举例:
-
,将文件 file1 和 目录 dir1 移动到目录 dir2 里面。
-
,将文件 file1 重命名为 file_1。
删除 文件或文件夹:rm
-
-r 递归;-f 强制;-i 询问(个人建议常用)。
-
删除目录:。
-
喜闻乐见的删库跑路(新手要理解其意思):。
文件内容查看
Linux系统中使用以下命令来查看文件的内容:
cat 由第一行开始显示文件内容
tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
nl 显示的时候,顺道输出行 !
more 一页一页的显示文件内容
less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
head 只看头几行
tail 只看尾巴几行
查看长文件 :,最下面显示的是这个文件的名称,我们可以使用 “PageUp” 和 “PageDown” 可以进行上一页和下一页的翻页。如果要知道具体的控制键,我们可以按下 “H” 键,可以显示 less 命令的所有控制键,如果想结束,可以按 “q” 键。
以上每个命令的选项,可用时再查(上面 “Linux 命令查询” 处给出了一些在线查询 Linux 命令 的 站),用的多了就 内化 / 记住了。
文件权限 & 用户管理 & 密码管理
文件权限/属性管理
这里面讲的更详细 Linux 文件基本属性 | 菜鸟教程 (runoob.com),Linux权限管理详解 (biancheng.net)。
一句话明白:对于一个文件,通过 chown 来授权某个用户所有该文件,通过 chmod 为该用户设置可以操作(读/写/执行)该文件的权限。
-
改变文件所属用户组 :chgrp
将 install.log 文件的用户组改为 hy 用户组:。注意 hy 用户组必须要在/etc/group 文件内存在才可以。
-R : 进行递归的持续更改,也连同子目录下的所有文件、目录都更新成为这个用户组之意。常常用在更改某一目录内所有文件的情况。
-
改变文件的所有者:chown
例子:、,改变 install.log 文件的所有者为 bin,改变 install.log 文件的所有者和用户组为 book 和 book。
改变文件所有者和用户组的这两个命令的应用场景:复制文件,由于复制行为会复制执行者的属性和权限,因此复制后需要改变文件所属用户、用户组等。
-R:也是递归子目录。
-
改变文件权限:chmod
使用 u、 g、 o 三个字母代表 user、 group、 others 3 中身份;此外 a 代表 all,即所有身份。范例:,即对于 .bashrc 文件,用户有 rwx 权限,用户组和其它用户有 rx 权限。
也可以增加或去除某种权限,“ +”表示添加权限,“ -”表示去除权限: 、、。
数字的方式就不细说了:用 4 代表 r 权限,2 代表 w 权限,1 代表 x 权限;owner = rwx = 4+2+1 = 7;例子:。
用户与用户组管理
Linux 用户和用户组管理 | 菜鸟教程 (runoob.com),Linux用户和用户组管理详解 (biancheng.net)。
对于用户与用户组的阐释:
-
Linux用户和用户组(包含两者之间的关系) (biancheng.net)。
-
linux用户和用户组相关概念、理解、操作森狗道格的博客-CSDN博客linux用户和组的作用。
主要有这些命令:
Linux系统添加新用户(useradd命令)
Linux修改系统用户密码(passwd命令)
Linux修改系统用户信息(usermod命令)
Linux强制系统用户登陆时修改密码(chage命令)
Linux删除系统用户(userdel命令)
Linux查看用户的UID和GID(id命令)
Linux临时切换用户身份(su命令)
Linux whoami和who am i命令
Linux添加用户组(groupadd命令)
Linux修改用户组(groupmod命令)
Linux删除用户组(groupdel命令)
Linux将系统用户加入或移除群组(gpasswd命令)
Linux切换用户的有效群组(newgrp命令)
-
增加用户:,表增加一个用户 user1 ,并接着提示设置密码;只有 root 可以修改所有用户的密码,普通用户只能修改自己的密码,修改自己的密码 。
-
删除用户:,慎用,可删除用户帐 与相关的文件。若不加 -f 参数,则仅删除用户帐 ,而不删除相关文件,加上则会删除用户登入目录以及目录中所有文件。
-
修改用户信息:usermod,选项:
-
-c <备注>,修改用户帐 的备注文字。
-
-d 登入目录>,修改用户登入时的目录。
-
-e <有效期限>,修改帐 的有效期限。
-
-f <缓冲天数>,修改在密码过期后多少天即关闭该帐 。
-
-g <群组>,修改用户所属的群组。
-
-G <群组>,修改用户所属的附加群组。
-
-l <帐 名称>,修改用户帐 名称。
-
-L,锁定用户密码,使密码无效。
-
-s <shell>,修改用户登入后所使用的shell。
-
-u <uid>,修改用户ID。
-
-U,解除密码锁定。
-
-
普通用户 与 超级用户 之间切换:
切换为 root 超级用户的命令为:;切换普通用户的命令为:,也可以用 来退出超级用户。
密码管理
-
给 root 用户设置密码,并在用户间切换:
-
给 root 设置密码;
-
;
-
;
-
成功;
-
切换到 root 用户;用来切换用户;
-
切回。
-
-
Linux 忘记密码解决方法 | 菜鸟教程 (runoob.com)。
获取命令帮助: –help/man
命令后加 –help 选项,获取此命令的所有选项和其释义。详情如下图。
命令的完整手册,命令前加 man,提供命令、API、概念、配置文件等帮助信息。详情如下。
man 手册一共有 9 册,每一册专注一个方面。如下表。
section | 名称 | 说明 |
---|---|---|
1 | 用户命令 | 用户可操作的命令 |
2 | 系统调用 | 内核提供的函数(查头文件) |
3 | 库调用 | 常用的函数库 |
4 | 特殊文件 | 设备文件(/dev下)和特殊文件 |
5 | 文件格式和约定 | 对一些文件进行解释 |
6 | 游戏程序 | 游戏程序 |
7 | 杂项 | 包括宏包和约定等 |
8 | 系统管理员使用的管理命令 | 通常只有系统管理员可以使用 |
9 | 内核相关 | Linux内核相关文件 |
段名 | 主要内容 |
---|---|
NAME | 命令、数据名称的简短说明 |
SYNOPSIS | 简短的命令语法说明 |
DESCRIPTION | 最为权威和全面的使用说明 |
EXAMPLES | 使用本命令或数据的一些参考示例 |
AUTHOR | |
REPORTING BUGS | 告相关的错误信息 |
COPYRIGHT | 版权 |
SEE ALSO | 与本命令或数据相关的其他参考说明 |
连接流 / 取文件内容:cat
-
-n 或 –number:由 1 开始对所有输出的行数编 。
-
-b 或 –number-nonblank:和 -n 相似,只不过对于空白行不编 。
-
-s 或 –squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
例子:
比较文件差异:diff
Linux diff命令
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!