嵌入式开发概述、Linux常用命令
1.嵌入式开发VS传统开发(单片机开发)
单片机开发:软件->硬件
缺点:软硬件的耦合度太高(软件依赖于硬件);不同硬件发生变化,相应的软件也要发生改变;
改变方法:依赖关系倒转,加入嵌入式操作系统。软件–>操作系统–>硬件;解放上层应用软件
嵌入式开发:在已有的硬件上移植操作系统,一种专门设计用于执行特定任务的计算机系统。
软件(上层 应用软件)–>操作系统(底层 系统软件:驱动、BSP、内核)–>硬件
eg:实现打开摄像头的功能,软件调用open函数–>操作系统实现open函数–>打开摄像头
两者区别:两者是否有操作系统
常见的嵌入式操作系统:Linux、uClinux、WinCE、PalmOS、Symbian、eCos、uCOS-II、VxWorks、pSOS、Nucleus、ThreadX 、Rtems 、QNX、INTEGRITY、OSE、C ExecuTIve
商业型:VxWorks(实时性高:系统能够按照预定的时间要求进行实时响应的能力)
、WinCE、PalmOS、Symbian、QNX、pSOS、VRTX、Lynx OS、Hopen、Delta Os
免费型:Linux、uClinux、uC/OS-II(内存小)、eCos、uITRON
2.嵌入式优缺点
嵌入式优点:功耗低,体积小
eg:一张任天堂的游戏卡带内存60K,相当于60*1024B *8bit大小
嵌入式操作系统优点:解决了软硬件的耦合度,提高了软件的移植性,让每个人都适配;提供了许多开源的工具和库,提高了开发效率;可以实现多任务和多线程。
缺点:成本上升
3.嵌入式开发的就业前景
嵌入式开发学习路线:
(1)、嵌入式Linux操作系统的使用(命令:80-120)
(2)、嵌入式Linux开发工具(gcc、gdb、makefile、git、shell、cmake)
(3)、嵌入式C语言实战(代码量:1.2w 核心语法:用和理解)
(4)、嵌入式数据结构(栈、队列、链表、数(平衡二叉树、红黑树)、排序、图)
(5)、嵌入式Linux C开发(文件、进程、进程通信、多线程、网络、数据库:sqlite3)
(6)、嵌入式C++语言实战(C++11/14/17/20核心语法、STL库)
(7)、嵌入式设计模式(14-18种)
(8)、嵌入式GUI开发(Qt:界面、布局、事件、文件、多任务、网络、数据库)
(9)、嵌入式智能硬件开发(stm32-F4:接口、总线)
(10)、嵌入式操作系统移植(u-boot、内核、文件系统)
(11)、嵌入式底层驱动开发(9种设备驱动)
(12)、嵌入式人工智能(Python、深入学习、模型部署及优化
4.软硬子系统的选择
嵌入式硬件子系统:嵌入式处理器、存储器、模拟电路、电源、接口控制器、接插件等
微处理器和嵌入式处理器:嵌入式系统通常使用特定的微处理器或嵌入式处理器,这些处理器具有低功耗、高性能和实时性
要求等功能。
嵌入式操作系统:嵌入式系统需要使用专门的嵌入式操作系统,如RTOS(实时操作系统),用于管理硬件资源、任务调度、外设驱动程序等。
嵌入式软件开发:嵌入式系统的软件开发包括底层驱动程序开发、应用程序开发、算法实现优化等。通常使用C、C++等编程语言进行开发。(PS:Java和python需要额外的字符表占用内存,而C和C++更接近底层系统语言)
嵌入式系统架构开发:嵌入式系统的架构设计涉及硬件和软件的结合,需要考虑功耗、性能、实时性、可靠性等因素,并选择合适的处理器、存储器和外设等。
eg:设计一款音乐播放器需要前端界面(qt/web)-------数据传输方式(tcp/http等)-------文件服务器(Linux),用户数据存储需要远端服务器(数据库)。
通信和网络技术:嵌入式系统可能需要与其他设备或系统进行通信和互联,因此需要涉及通信协议、网络技术、无线技术等相关技术。
传感器和执行器技术:嵌入式系统通常需要与外部进行交互,使用传感器(外界数据的量化让计算机可以衡量)来获取输入数据,通过执行器实现相应的输出控制。
实时系统设计:某些嵌入式系统对实时性要求较高,需要进行实时系统设计,确保任务的及时响应和完成。
电源管理技术:嵌入式系统通常要求低功耗和长电池寿命,因此需要采用有效的电源管理技术,包括功耗优化、休眠模式等。
嵌入式软件子系统:底层驱动、操作系统、应用程序
嵌入式系统CPU的选择:
(1)、架构和功能:不同的CPU架构(如ARM,x86 32位,x64 64位等)具有不同的指令集和性能特点。选择适合项目需求的架构和性能级别是关键。
(3)、集成度和外设支持:考虑CPU的集成度和外设支持情况。一些CPU芯片集成了许多外设和接口,如UART、SPI、I2C、USB等,这可以简化系统设计和开发过程。
一个程序的运行需要从硬盘调入内存,再从内存调入CPU,影响速度的因素有:存储器的读取速度以及cpu的处理速度
ARM体系结构:crotex-M--------->MCU(stm32)
crotex-R----------实时性
crotex-A---------->MPU
5.嵌入式Linux的安装与使用
Linux发行人:Linux Torvalds 于1991年10年由UNIX改来
Linux特点:社团、免费、开放、易获得、稳定、健壮、GPL、软件
Linux的发展与壮大:
支持POSIX:可移植操作系统接口
GUN计划:GNU is not unix; gcc gdb make
GPL协议:要求GPL程序的演绎作品也要在GPL之下;
Linux主流发行版:
Debian-----Ubuntu-----Linux Mint
Fedora-----RHEl------(CentOS、Oracle Linux)
SUSE-------SLES------openSUSE
虚拟机的作用:通过软件方法模拟一台PC机
虚拟机的种类:vmware:商业版本 windows、
virtualPC:微软支持Windows、
virtualBOX支持Linux和windows
6.Linux 常见命令:
文件分类:-普通文件、d目录文件、c/b设备文件、l链接文件(-s共享文件 -f堆文件 -p 管道文件 )
ls查看文件列表
ls显示当前目录中的文件名
ls -a打开显示所有文件及目录(含隐藏文件)
ls -l 显示文件的详细属性信息
ls -al 显示所有文件及其权限
ls-X 依据扩展名将文件排序显示
ls -R 递归显示所有子文件
ls / 打开 根目录
Linux系统目录结构:
/bin
存放常用命令
/sbin*
:系统管理员使用的系统管理程序、超级用户命令
/boot
启动Linux的核心文件,包括一些连接文件以及镜像文件
/dev
存放Linux的外部设备,在Linux中访问的方式和访问文件的方式是相同的
/etc
存放所有系统管理所需的配置文件和子目录
/home
用户的主目录
/lib
存放着系统最基本的动态连接共享库
/lost+found
:一般情况下是空的,当系统非法关机后。这里就存放了一些文件
/media
:自动识别一些设备,识别的设备挂载到这个目录下
/mnt:
让用户临时挂载别的文件系统的
/opt
:主机额外安装软件所摆放的目录
/proc
:一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
/root
:root用户的工作目录
/tmp
是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的
/usr/bin
:系统用户使用的应用程序
/usr
:第三方软件的默认安装目录
对文件夹的相关操作:
mkdir 创建文件夹;方法:mkdir 文件夹名
;eg:mkdir ./Vcode1.0/text相当于在当前目录下的Vcode1.0文件夹中创建一个叫text的文件
创建共享文件夹:sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o allow_other -o uid=1000
rmdir 删除文件夹;方法:rmdir 文件夹名
; eg: rmdir test0710 和 rm -r
作用相同,但是rmdir只能删除一个空目录
对文件的相关操作:
touch 创建文件; 方法:touch 文件名
;eg: touch 1.c相当于创建一个1.c的文件
rm 删除文件;方法:rm 文件名
;
rm -r目录名
删除一个目录
rm -i 文件名
删除前询问是否删除;
rm -f 文件名
强制删除
rm -rf 文件夹
强制删除该文件夹及子目录
mv 移动文件、文件重命名 ;方法:mv 文件 路径
移动文件剪切
方法: mv 文件名 新文件名
cp 复制文件;方法:cp 要复制的文件 文件名
本目录下实现复制
cp 要复制的文件 路径/文件名
实现跨目录复制
cp -r 目录名 目录名
拷贝目录
find 查找命令;方法: find 路径 -name 文件的名字
查找相应路径下的文件
find . -name "*.c" | wc -l
查找当前目录下.c文件个数
find . -name "*.c" | xargs wc -l
查看当前目录下.c文件行数
其他命令:
chmod 命令:修改文件的权限;方法:chmod 权限 路径
eg:修改rwx rwx r-x 为rwx rwx rwx相当于chmod 777 文件名或路径
要求:本人(当前用户)全权限,本组不可修改,其他人只可运行 rwx r-x --x 751
单独修改某一用户的权限:chmod u+x 文件名
:修改当前用户的执行操作变为可执行
chmod g+x 文件名
:修改与当前用户同组用户权限
chmod o+x 文件名
:修改其他用户
pwd 显示当前所在的绝对路径;
~代表工作目录;.代表当前目录;/代表根目录;
绝对路径:从根目录出发的路径;相对路径:有个参照物的
通配符:* 代表任何条件都满足;eg:sudo find *.c代表查找满足所有.c的所有文件
ifconfig 查看网卡信息
ifconfig 网卡名 IP地址
实现设置网卡的IP,如果是静态IP无法更改
ifconfig 网卡名 down
实现关闭网卡的功能
ifdown 网卡名
关闭网卡
ifconfig 网卡名 up
实现开启网卡的功能
ifup 网卡名
开启网卡
apt-get命令:管理服务软件,需要先设置软件源并更新
apt-get install httpd
安装指定的服务软件
apt-get update
更新软件列表
apt-get remove httpd
卸载指定的服务软件
apt-get -purge remove httpd
卸载指定的服务软件及配置信息
apt-get clean
删除所有已经下载的包文件
apt-get autoclean
删除已下载的旧包文件
apt-get autoremove
卸载所有自动安装且不再使用的软件包
which命令:查找命令文件,能够快速搜索二进制程序所对应位置
which rebot
查找某个指定命令文件所在位置
which shutdown poweroff
查找多个指定命令文件所在位置
whereis命令:查找指定命令程序及相关文件所在位置 whereis poweroff
uname命令:查看系统信息 uname -a
diff命令:比较两个文件的不同之处 -a逐行比较
vim编辑器:
**:wq! **强制保存退出
a 进入编辑模式
可以使用vim /etc/vim/vimrc
来配置vim文件
查看文件的相关命令:
**cat 命令:**查看文档内容
tac 命令:反向显示文档内容
more命令:分页显示文本文件内容,只能从前往后浏览
less 命令:用于分页显示文件内容,可以从前往后,还可以从后往前浏览
head 命令:显示文件开头内容,默认为前100行
head -n 10 file.c
显示文件的前10行内容
head -c 20 file.c
显示文件的前20个字符
tail 命令:默认显示文件尾部的后10行内容
tail -f file.cfg
持续刷新显示指定文件尾部的后10行内容
tail -n 5 file.c
显示文件的后5行内容
tail -c 30 File.cfg
显示指定文件尾部的后15个字节
file 命令:识别文件类型,也可以用来辨别一些内容的编码格式
file File.cfg
或file /bin/ls
查看指定文件类型
grep命令:强大的文本搜索工具;man 1 grep :-n显示行号;-r表示递归查找
grep root /etc/passwd
搜索指定文件中包含某个关键词的内容行
grep ^root /etc/passwd
搜索指定文件中以某个关键词开头的内容行
grep linuxprobe /etc/passwd /etc/shadow
搜索多个文件中包含某个关键词的内容行
grep -h linuxprobe /etc/passwd /etc/shadow
搜索多个文件中包含某个关键词的内容行,不显示文件名称
grep -c root /etc/passwd /etc/shadow
显示指定文件中包含某个关键字行的数量
创建新用户的相关操作:
创建新用户:sudo adduser 用户名
删除用户:sudo deluser 用户名
切换用户:su 用户名
更改密码:sudo passwd 用户名
压缩相关命令:
tar 压缩、解压缩命令
tar-c: 创建备份文件
tar-v: 显示压缩过程详细信息
tar-z:使用gzip命令压缩
tar-f: 指定压缩目标文件
tar-x:从压缩包内提取文件
tar -czvf dir.tar.gz dir/将dir 目录打包成dir.tar.gz
tar-zxvf dir.tar.gz 解压缩dir.tar.gz
进程相关命令:
**ps命令:**显示进程状态(例如进程的号码、发起者、系统资源使用占比、运行状态等),经常会与kill命令搭配使用来中断和删除不必要的服务进程,避免服务器的资源浪费;
a:显示一个终端的所有进程信息
-A:显示和终端关联的所有进程信息
e:显示每个程序所使用的环境变量
-e:显示所有进程,和终端不关联,和—A效果相同
-le :查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级
-ef :和le 相似,比le显示少一些,其中e显示的最少;ps -ef | grep ssh
将当前系统运行状态中指定进程信息过滤出来;
ps aux
查看系统中所有的进程
kill命令:用于杀死进程,如果并没有被结束,则可以使用信号9进行强制杀死进程;kill -9 进程名
-l显示系统支持的信号列表
7、ssh远程连接
SSH是一种网络协议,用于计算机之间的加密登录。
登录原理:
| 1、登录请求---------------------------------------------->|
|<--------------------------------------2、发送自己的公钥 |
客户端--------> |3、加密登录信息后登录-------------------------------> |<-------------服务端
|<--------------4、使用私钥解密登录信息,验证登陆|
使用ssh实现远程连接的常用工具:Xshell、向日葵、MobaXterm、SourceCRT等