【嵌入式系统开发】001嵌入式Linux基础技术

文章目录

  • 0. 学习路线
  • 1. Linux入门概念
    • 1.1 Linux 与 Windows 的区别
    • 1.2 shell是什么
    • 1.3 PATH环境变量
      • 1.3.1 什么是环境变量
      • 1.3.2 添加PATH环境变量的三种方法
    • 1.4 Ubuntu 的文件系统组织方式简介
  • 2. Linux的常见指令
    • 2.1 Linux指令基本形制
    • 2.2 目录与文件操作命令
    • 2.3 权限与属性
    • 2.4 查找与搜索
    • 2.5 压缩与解压缩
    • 2.6 网络命令


0. 学习路线

  1. 嵌入式Linux系统就是一套完整的PC系统。
图1. Windows与Linux的启动流程对比
  1. 对于新手入门来说,需要动u-boot的可能性不大,投入过多精力得不偿失。
  2. 对内核本身的操作,如裁剪、移植,一般是芯片厂商做的事情,也不应该过多牵扯精力。
  3. 因此总的原则是:先粗浅入门,再专题学习,。

具体而言:

  • 入门:应用程序开发–>驱动程序基础–>项目
  • 进阶:u-boot or 内核 or 驱动进阶

1. Linux入门概念

1.1 Linux 与 Windows 的区别

  • 两者最大区别在于目录,Linux视万物皆为目录(文件)
  • Windows 是盘符对应磁盘分区。
  • Linux 是目录挂载在磁盘的不同分区上。
  • Windows的路径分隔符是 \ ; Linux的路径分隔符是 /
  • /dev/sda1 : dev指设备,sd表示磁盘,a表示第一个磁盘,1表示该磁盘上的第一个分区。

1.2 shell是什么

  • shell是一个应用程序,它可以从键盘、串口接受指令,回车后执行指令。
  • 接受键盘传入的字符并回显,回车是通知shell输入结束了;
  • 解析输入的字符串,寻找程序,通常 shell 是去PATH环境变量所指的位置寻找程序/指令。也可以直接给 shell 指定路径。
  • 找到程序,启动程序,传入参数。
  • 举个例子:
  • 先创建一个 hello.c 文件
# include <stdio.h>int main(int argc, char **argv)
{if (argc >= 2)printf("Hello, %s!\n", argv[1]);else printf("Hello, world!\n");return 0;
}
  • 然后,在其所在路径下执行以下指令对其进行编译。
gcc -o hello hello.c # 第一个hello是给可执行文件指定的名称
  • 显然,编译后直接对 hello 进行运行是行不通的。
  • 因为 shell 会去 PATH 所指路径下去寻找 hello 程序,这肯定找不到。
  • 因此应该为 hello 指定存储路径,绝对路径或相对路径都可以。
  • 也可以把可执行文件 hello 直接移动到 PATH 下的某个路径内。
hello # 行不通
./hello # Hello, world!
./hello Shili_Chen # Hello, Shili_Chen! # 在执行这条指令时,argc = 2, argv[0] = ./hello, argv[1] = Shili_Chen# 这就是 shell 的传参方式sudo cp hello /usr/local/bin/hello2 # 把可执行文件转移到 PATH 所指定的路径 /usr/local/bin 下,命名为hello2
hello # 这时候就好使了
  • shell 甚至可以写循环,它是有自己的编程的。

1.3 PATH环境变量

1.3.1 什么是环境变量

  • evn 指令可以看到各种环境变量,等号前的是变量名,等号后的是它的值。
  • echo $PATH 可以显示PATH环境变量的具体值。

1.3.2 添加PATH环境变量的三种方法

  1. 临时添加的方法,只对当前终端有效。
export PATH=$PATH:/home/chen # 此时用户 chen 的路径就被临时存放在PATH中了
  1. 永久添加的方法,只对当前用户有效。
gedit ~/.bashrc # 编辑 .bashrc文件
# 在打开的文件最后加上
export PATH=$PATH:/home/chen # 重启后就生效了
  1. 永久添加的方法,对所有用户都有效。
sudo gedit /etc/environment # 修改/etc/environment
# 在打开的页面里找到 PATH ,在它后面添加:/home/chen 
# 当然其实不一定非把用户路径添加上,只添加可执行文件所在路径也OK

1.4 Ubuntu 的文件系统组织方式简介

  1. 系统存放可执行程序/命令的路径
  • /bin 所用用户皆可用
  • /sbin 系统命令,仅管理员可用
  1. 无关系统启动的程序/命令的存放路径
  • /usr/bin
  • /usr/sbin
  • 注:usr 全称unix software resource 存放非系统启动的必要资源,可分享与不可变动的数据。
  1. 存放库文件的路径
  • /lib
  • /usr/lib
  1. 一般启动文件、内核的保存路径
  • /boot
  1. 设备文件,表示硬件
  • /dev
  • /dev/sda1 : dev指设备,sd表示磁盘,a表示第一个磁盘,1表示该磁盘上的第一个分区。
  1. 配置文件
  • /etc
  1. 家目录与用户目录
  • /home 家目录,它的下级目录对应不同的用户
  • /home/chen 用户chen的专属目录
  1. 虚拟文件系统的挂载目录
  • /proc
  • /sys
  • 注1:所谓的虚拟文件系统是指不对应真实的存储设备。
  • 注2:对它们进行访问可以看到内核信息,如 /proc 里保存的是进程信息。
  1. 缓存文件保存路径
  • /var 保存的是缓存文件,临时可变动的文件。

2. Linux的常见指令

2.1 Linux指令基本形制

  • Linux的命令分为三部分:
  • 命令 [选项] [参数]
  • command [options] [parameters]
  • ls -l /
  • [] 表示选填,<>表示必填。

2.2 目录与文件操作命令

  1. clear 清除终端历史痕迹
  2. pwd指令——打印当前路径
  • 家目录,即/home/chen。可以用 ~ 表示。
  • 上一次的路径,可以用 - 表示。
  1. cd指令——路径跳转
cd - # 返回上一次的路径。
  1. 创建或删除目录
mkdir 目录名 # 创建目录
rmdir 目录名 # 删除目录,实际上它只能删除空目录
rm 路径名/文件名 -r # 删除文件/目录,因为用递归的方式删除,所以可以删除非空目录
  • 注:rm -rf 指令是递归强制删除,这是个危险的指令,要当心。
  1. ls指令——列出内容
  • 列出目录内容以及文件信息
  • 有多种选项可供使用:-a 列出隐藏文件;-l 列出详细信息,能看到文件权限。
ls -l tes*  # tes*用于缩小展示范围,也可以指定路径
  1. cp指令——复制文件
cp 1.txt '2 .txt' # 如果文件中有空格,可以用单引号把它引起来。
cp 1.txt ./test # 往test里复制1.txt文件。
  1. mv指令——移动/改名
mv 1.txt 2.txt # 改名
mv 1.txt ../2.txt # 移动 + 改名
mv 1.txt ../ # 只移动,不改名
  1. cat指令——显示/拼接显示
cat 1.txt # 显示
cat 1.txt 2.txt # 显示拼接
  1. touch指令——触摸/创建
touch 1.txt # 有就只是触摸,改变文件的时间信息;无则创建新的文件

2.3 权限与属性

  1. 权限查看
  • 查看文件的详细信息,在最开始可以看到如下形式的信息:
    在这里插入图片描述
图2. 文件详细信息示意图
  • 最前面的十个字符代表了目录/文件的权限信息。
  • 第一个字符常见两种取值:d- 。d 表示目录;- 表示常规文件。
  • 第二到第十这九个,三个一组,分别表示拥有者、同组者、其他者的权限。
  • 权限字符有四种:rwx- 。分别表示,读,写,执行,无权限。
  • 以图2所展示的信息为例:
  • -rw-rw-r–
  • 第一位的 - 表示常规文件;
  • 第二到第七位的 rw-rw- 表示拥有者、同组者都有读写权限,但没有执行权限;
  • 第八到第十位的 r-- 表示其他用户对该文件只有读取的权限。
  1. chmod指令——权限修改
  • 用421编码 :rwx 就是二进制的111,即十进制的7。
chmod 675 1.txt # 即把1.txt的权限设置为 rw-rwxr-x
  • 用加减符
chmod -x 1.txt # 给所有用户都减去执行权限
chmod a+x 1.txt # 给所有用户都加上执行权限
chmod u-r 1.txt # 给拥有者减去读权限
chmod g+w 1.txt # 给同组者加上写权限
chmod go-x 1.txt # 给同组者和其他人减去执行权限
  • 对目录递归修改权限
chmod -R 776 目录名
  1. chown指令——修改文件拥有者
chown root:root 1.txt # 把拥有者调整成了root组的root用户了,用户:组

2.4 查找与搜索

  1. find命令——根据名字查找文件地址
  • find 路径 选项 查找条件
find /home/chen/桌面/ -name 1.txt # 查找名为1.txt的文件
find /home/chen/桌面/ -name *2.txt # 查找名字以2.txt结尾的文件,*是通配符
  • 注:路径用于缩小搜索范围,不指定路径就在当前路径下递归寻找。
  1. grep命令——根据内容搜索文件
  • grep [选项] [查找模式] [文件名]
grep "abc" * -nwr # 在当前路径下找所有带"abc"的文件,n列出所在行,w整词查找,r递归查找

2.5 压缩与解压缩

  • tar——压缩与解压缩
  • tar的常用选项:
  • c :创建压缩;
  • x :提取压缩;
  • t :查看压缩;
  • z :用于对gzip方式的处理,与c配合即压缩,与x配合即解压;
  • j :用于对bzip2方式的处理;
  • v :报告tar处理的信息;
  • f : 表示文件,后接文件名;
  • C<指定目录> :解压到指定目录。
tar czf test.tar.gz test # 把文件(夹)test压缩成test.tar.gz文件
tar xjf test.bar.bz2 # 把test.tar.gz解压到当前路径下
tar xzf test.tar.gz -C 路径 # 把test.tar.gz解压到指定路径下

2.6 网络命令

  1. ifconfig命令——网络命令
ifconfig
  1. ping命令——可以观察能否上网
ping 网址 
  • 注:一般虚拟机,有NAT网卡,Windows能上网,Ubuntu也能上网。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/587940.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Prometheus+grafana环境搭建redis(docker+二进制两种方式安装)(四)

由于所有组件写一篇幅过长&#xff0c;所以每个组件分一篇方便查看&#xff0c;前三篇 Prometheusgrafana环境搭建方法及流程两种方式(docker和源码包)(一)-CSDN博客 Prometheusgrafana环境搭建rabbitmq(docker二进制两种方式安装)(二)-CSDN博客 Prometheusgrafana环境搭建m…

OpenHarmony实战:轻量级系统之文件子系统移植

utils部件可被各业务子系统及上层应用使用&#xff0c;依赖芯片文件系统实现&#xff0c;需要芯片平台提供文件打开、关闭、读写、获取大小等功能。 移植指导 OpenHarmony文件系统需要适配如下HAL层接口&#xff1a; 表1 文件打开或关闭 接口名描述HalFileOpen文件打开或创…

20240402—Qt如何通过动态属性设置按钮样式?

前言 正文 1、点击UI文件 2、选择Bool型或是QString 3、设置后这里出现动态属性 4、这qss文件中绑定该动态属性 QPushButton[PopBlueBtn"PopBlueBtn"]{background-color:#1050B7;color:#FFFFFF;font-size:20px;font-family:Source Han Sans CN;//思源黑体 CNbor…

【R】Error in library(foreach) : 不存在叫‘foreach’这个名字的程辑包

Error in library(foreach) : 不存在叫‘foreach’这个名字的程辑包 此外: Warning message: package ‘parallel’ is a base package, and should not be updated 解决方法 缺少名为 foreach 的包&#xff0c;使用install.packages("foreach")将名为foreach 的包…

最新AI工具系统ChatGPT网站运营源码SparkAi系统V6.0版本,GPTs应用、AI绘画、AI换脸、垫图混图、Suno-v3-AI音乐生成大模型全支持

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…

深入理解 Vue3 中使用 v-model技术实现双向数据绑定

引言 在 Vue3 中&#xff0c;v-model 是一个非常有用的指令&#xff0c;它提供了一种简洁的方式来实现组件之间的双向数据绑定。本文将深入探讨 Vue3 中的 v-model 技术&#xff0c;包括它的工作原理、使用场景以及如何在自定义组件中应用 v-model。 一、v-model 的工作原理 在…

深度学习理论基础(五)卷积神经网络CNN

目录 前述&#xff1a;卷积神经网络基础1.卷积网络流程2.卷积网络核心3.卷积下采样4.卷积上采样--转置卷积 一、卷积神经网络层1.卷积层&#xff08;1&#xff09;内部参数&#xff1a;卷积核权重&#xff08;2&#xff09;内部参数&#xff1a;偏置&#xff08;3&#xff09;外…

【Frida】【Android】09_爬虫之Socket

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

js实现websocket断线重连功能

在项目开发中我们可能经常要使用websocket技术&#xff0c;当连接发生断线后&#xff0c;如果不进行页面刷新将不能正常接收来自服务端的推送消息。为了有效避免这种问题&#xff0c;我们需要在客户端做断线重连处理。当网络或服务出现问题后&#xff0c;客户端会不断检测网络状…

Tomcat部署flowable出现consider increasing the maximum size of the cache

使用Apache Tomcat/8.5.32部署运行flowable-6.5.0时发现控制台有警告 问题原因&#xff1a;解决方法: 使用Apache Tomcat/8.5.32部署运行flowable-6.5.0时发现控制台有警告 01-Apr-2024 20:55:08.877 警告 [localhost-startStop-1] org.apache.catalina.webresources.Cache.ge…

二百二十九、离线数仓——离线数仓Hive从Kafka、MySQL到ClickHouse的完整开发流程

一、目的 为了整理离线数仓开发的全流程&#xff0c;算是温故知新吧 离线数仓的数据源是Kafka和MySQL数据库&#xff0c;Kafka存业务数据&#xff0c;MySQL存维度数据 采集工具是Kettle和Flume&#xff0c;Flume采集Kafka数据&#xff0c;Kettle采集MySQL数据 离线数仓是Hi…

【Mysql】一文解读【事务】-【基本操作/四大特性/并发事务问题/事务隔离级别】

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…