一、概述
安排
1.嵌入式Linux操作的使用(嵌入式?Linux命令)
2.嵌入式Linux开发工具(gcc、gdb、make、shell、cmake、git)重要在C语言基础
3.嵌入式C语言开发(1w+;多练;接受快慢无所谓;侧重实战;笔试题,目标:全部通过)
4.嵌入式Linux C系统编程(最重要最难:操作系统原理,文件、进程、线程、网络原理、网络编程、数据库)
5.嵌入式数据结构(栈、队列、链表、树、排序、图)
6.嵌入式C++开发(面向对象的思想、C++11、14、17、20,设计模式,很难,但是大公司都需要,大厂瞄准C++工程师)
7.嵌入式GUI(Qt)
8.嵌入式硬件开发(51、stm32,cortex-A7/A9) 三个芯片
9.嵌入式系统移植(u-boot、内核、文件系统)
10.嵌入式底层设备驱动开发(字符设备、框架、网络设备)
11.嵌入式操作系统开发
12.嵌入式前沿技术(嵌入式人工智能)
13.嵌入式IC开发(fpga)
保底,做完4个项目
时间安排:
1.12-1.26:1,2,3
2.10-3.15:3,4,5项目
4-6:双休+晚上6,7项目
7-8: 8,9,10项目
9-10:12,13项目
学习要求:
1.认真听课,记录自己的重点知识,最终形成自己的知识体系
2.讲练结合,要多敲代码,给时间一定要写
3.有问题,一定要问,可以打断,不要累积自己的知识盲区
学习成果
知识积累
能力提升(项目,介绍自己的能力)
二、Linux
一、什么是嵌入式
以计算机应用为核心,软硬件可裁减的专用计算机系统,对功耗,体积,成本,可靠性有要求的系统
unix:
linux:安卓,deepin,centos,ubuntu
windows:
三、linux的系统的层次
应用层
APP,makefile,命令,脚本
内核层
内核层的五大功能:
文件管理:通过文件系统对文件组织管理
内存管理:内存的申请和释放工作
网络管理:通过网络协议进行网络数据包的收发
进程管理:程序的一次执行过程,程序的创建,销毁,调度等(多任务 == 多进程)
设备管理:设备驱动的管理
硬件层
LED,Camera,触摸屏,网卡,硬盘等
linux系统:分时,多任务,多用户的操作系统
cpu:
L1CATCH:1700GB/s
L2CATCH:200GB/s
内存:
ddr3:内存大概10GB/s
ddr4:内存大概60GB/s
硬盘:机械硬盘(HDD):100MS/s
固态硬盘SATA(SSD):450MS/s
nvme(SSD):2000MS/s
四、linux目录结构
ctrl + shift + '+/-'调节字体大小
bin:存储一些可执行的二进制的命令
dev:设备目录
etc:存储linux操作系统的环境变量
mnt:挂载目录
sbin:超级二进制文件
home:家目录(用户目录)
root:存放管理员的一些配置文件
lib:存放支持linux操作系统运行的lib库
五、命令行提示符的介绍
jsetc @ linux : /dev $ | | | | | 用户名 分隔符 主机名 当前所在的路径 权限 $普通用户 #管理员权限 ~:用户目录的路径 (/home/jsetc)
六、linux的基本命令
-:后面一半跟属性
*:所有
6.1 ls命令
ls:显示当前所有的目录和文件
ls -a:显示所有的隐藏目录和文件
ls -l:显示当前目录和文件的所有属性
ls -al:(ll)显示所有隐藏文件或者目录的属性
6.2 chmod命令
chmod:修改文件或者目录的权限
用法:chmod 权限 目录/文件
举例:chmod 775 jsetc
d rwx rwx r-x 6 jsetc jsetc 4096 1月 10 15:47 jsetc/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 其它用户 | | 同组用户的其它用户 | 当前用户 文件的属性 chmod:修改文件或者目录的权限 用法:chmod 权限 目录/文件 举例:chmod 775 jsetc u:usr 当前用户权限 g:group 同组用户其他用户权限 o:other:其它用户权限 a:all:所有用户 chmod o+x 文件名 //给其它用户加上可执行权限 文件的属性: bsp-lcd b:块设备文件 s:套接字文件 p:管道文件 -:普通文件 l:软链接文件 c:字符设备 d:目录文件
Linux文件属性详解
6.3 cd 命令
cd:(change dir)
cd 路径 // 进入指定的目录
路径:
绝对路径:从根目录开始的路径
相对路径:从当前目录开始的路径(逻辑路径)
. :当前路径
.. :上一级路径
../..:上一级路径的上一级路径
6.4 pwd 命令
显示当前用户所在的路径(绝对路径)
6.5 mkdir 命令
mkdir:(make dir):创建目录 用法:mkdir 目录名 mkdir 目录1 目录2 -p:递归创建多级目录
6.6 sudo命令
含义:以管理员权限运行
6.7 touch命令
功能:创建文件
touch:文件名
6.8 rm命令
功能:删除文件或者目录
rm -r :递归强制删除
6.9 cp命令
功能:复制文件或者目录
用法:cp 源路径 目的路径
cp 源路径 目的路径 -r //复制的是一个目录
6.10 mv命令
功能:移动一个文件或者目录(重命名,剪切)
用法: mv 原路径 目的路径
6.11 cat命令
功能:查看文件中的内容
用法:cat文件
cat -n 文件名 //显示行号
6.12 su命令
功能:切换用户
sudo su 用户名
举例: 普通用户—>管理员 sudo su root
管理员 ---->普通用户 su jsetc
6.13 clear命令
功能:清屏(快捷键ctrl + l)
6.14 tab按键补齐
6.15 find 文件查找
find 路径(默认当前路径) -name
七、vim编辑器
vim编译器的三种模式
命令行模式:按ESC
yy:赋值
p:粘贴
nyy:复制n行
u:撤销
dd:剪切
ndd:剪切n行
gg:跳转到首行
G:跳转到尾行
ngg:跳转到n行
shift + zz(或者ZZ):跳出并保存
插入模式:在命令行模式下,按 i 进入插入模式
底行模式:在命令行模式下,输入:shift + :
w:保存
q: 退出
wq:保存并推出
q!:不保存退出
set nu:显示行号
set nonu:隐藏行号
vsp 文件名 :左右分屏
sp 文件名:上下分屏
八、gcc编译器
下载命令: sudo apt-get install gcc
编译第一个代码:
gcc hello.c -o hello //-o:更改可执行文件名
8.1 gcc编译过程
预处理(-E):头文件的展开,宏的替换,条件编译等
gcc -E hello.c -o hello.i
编译:(-S):进行语法检查,如果代码有语法错误,会报错,编译结束,生成汇编文件
gcc -S hello.i -o hello.s
汇编(-c):将汇编文件转换成二进制文件,还没有链接到库,不可执行
gcc -c hello.s -o hello.o
链接:将所有的.o文件链接生成可执行文件
gcc hello.o -o hello
九、安装软件
(1)ubuntu deb
(2)redhat rpm
sl _ 3.03 - 17 build2_amd64 .deb | | | | 软件名 主版本 修订版本 架构(64位)
离线安装:dpkg:在安装软件的时候,如果有依赖,这些依赖程序不会被安装
sudo dpkg -i 软件包名 //安装软件 在终端上输入软件的名字 //执行软件 sudo dpkg -r 软件名 //卸载软件(会保留配置文件) sudo dpkg -P 软件名 //完全卸载 sudo dpkg -l 软件名 //查看软件的安装状态 sudo dpkg -L 软件名 //列举这个软件相关的所有路径 sudo dpkg -s sl //查看软件的安装状态(更详细)
apt-get,在线安装如果有依赖程序,这些依赖的程序会被一并安装上去
选择软件源:
sudo apt-get update //更新软件源 sudo apt-get install -f //更新软件依赖 sudo apt-get install gcc sudo apt-get install net-tools sudo apt-get install oneko sudo apt-get install cowsay sudo apt-get install cmatrix sudo apt-get install frozen-bubble sudo apt-get remove 软件名 sudo apt-get download 软件名 sudo apt-get clean //清除目录下/var/cache/apt/archives的安装包
补充
压缩的对象是文件(目录不能被压缩)
ubuntu上的压缩文件的格式 .gz .bz2 .xz
gzip/gunzip ------>xxx.gz bzip2/bunzip2 ------>xxx.bz2 xz/unxz ------->xxx.xz 压缩前: -rwxrw-r-- 1 jsetc jsetc 6848 1月 14 16:09 seqlist.c* gzip: -rwxrw-r-- 1 jsetc jsetc 1845 1月 14 16:09 seqlist.c.gz* bzip2: -rwxrw-r-- 1 jsetc jsetc 1934 1月 14 16:09 seqlist.c.bz2* xz: -rwxrw-r-- 1 jsetc jsetc 1800 1月 14 16:09 seqlist.c.xz*
压缩率: xz > gzip >bzip2
压缩速率:xz < gzip < bzip2
使用方法:
gzip/gunzip 文件名
注意:压缩和解压缩文件会被替换
打包(归档)
归档的对象是一个目录
将一个目录归档成一个文件,或者将这个归档后的文件重新释放变成一个目录
tar 命令 -c:创建归档文件 -x:释放归档文件 -z:压缩成gzip格式 -j:压缩成bzip2格式 -J:压缩成xz格式 -v:显示过程 -f:后跟的是文件的名字
1.归档
tar -cf hello.tar hello //将hello的目录打包成hello.tar文件 tar -xf hello.tar //将hello.tar拆成hello目录
2.打包并压缩成gzip格式
tar -czf tongxunlu.tar.gz tongxunlu
3.打包并压缩成bzip2格式
tar -cjf tongxunlu.tar.gz tongxunlu
4.打包并压缩成xz格式
tar -cJf tongxunlu.tar.gz tongxunlu
5.拆包(解压缩)
tar -xvf 压缩包 //万能拆包命令 tar -xvf 压缩包 -C 路径
作业
1.将今天所有的命令至少敲2遍
2.自学一些文件相关的命令
head,tail,wc file,more/less,grep,umask
学习计划总结日报表