苏嵌实训——day1
一、概述
安排
- 嵌入式Linux操作的使用(嵌入式?Linux命令)
- 嵌入式Linux开发工具(gcc、gdb、make、shell、cmake、git)重要在C语言基础
- 嵌入式C语言开发(1w+;多练;接受快慢无所谓;侧重实战;笔试题,目标:全部通过)
- 嵌入式Linux C系统编程(最重要最难:操作系统原理,文件、进程、线程、网络原理、网络编程、数据库)
- 嵌入式数据结构(栈、队列、链表、树、排序、图)
- 嵌入式C++开发(面向对象的思想、C++11、14、17、20,设计模式,很难,但是大公司都需要,大厂瞄准C++工程师)
- 嵌入式GUI(Qt)
- 嵌入式硬件开发(51、stm32,cortex-A7/A9) 三个芯片
- 嵌入式系统移植(u-boot、内核、文件系统)
- 嵌入式底层设备驱动开发(字符设备、框架、网络设备)
- 嵌入式操作系统开发
- 嵌入式前沿技术(嵌入式人工智能)
- 嵌入式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:目录文件
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 路径
作业
- 将今天所有的命令至少敲2遍
- 自学一些文件相关的命令
head,tail,wc file,more/less,grep,umask
学习计划总结日报表
课程名称 | Linux |
---|---|
本日计划 | 学习嵌入式C,复习指针 |
本日学习完成情况(详细说明本日任务是否按计划完成,开发的代码量) | 完成指定计划 |
本日学习中出现的问题汇总 | 指针是什么 |
本日未解决问题 | bsp-lcd还是不清楚 |
本日学习收获 | 知道分时工作,了解chmod的重新理解,指针的二次认识 |
自我评价(是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等) | 良好 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理