linux嵌入式学习

news2024/11/18 13:39:48

https://www.runoob.com/linux/linux-comm-ls.html
https://www.bilibili.com/video/BV1w4411B7a4?p=19&spm_id_from=pageDriver&vd_source=e7d12c9f66ab8294c87125a95510dac9

1

eMMC
eMMC(embedded MultiMediaCard)是一种集成电路,用于嵌入式设备中的内存存储。它是一种闪存技术,使用NAND闪存芯片,具有高速度和可靠性。eMMC通常用于手机,平板电脑,摄像机等嵌入式设备中,可以存储操作系统,应用程序,音频和视频文件等数据。

SD卡
SD卡(Secure Digital Memory Card)是一种可移动存储介质,使用闪存技术,通常用于相机,智能手机,平板电脑等设备中。SD卡有不同的容量和速度等级。它们可以存储照片,视频,音频,文档等数据。SD卡具有可擦除和可重写的特性,因此可以反复使用。

TF卡
TF卡(TransFlash Card)是一种小型储存卡,也被称为微SD卡。TF卡与SD卡类似,但更小,通常用于移动设备,如手机,MP3播放器等。TF卡容量和速度等级可以根据需求进行选择。TF卡可以存储照片,视频,音频,文档等数据。

USB
USB(Universal Serial Bus)是一种用于连接计算机和其他设备的通用接口标准。USB可以连接各种设备,如打印机,键盘,鼠标,外部硬盘驱动器,闪存驱动器等。USB闪存驱动器是一种便携式存储设备,可以存储数据,如文档,照片,视频等。USB闪存驱动器具有可擦除和可重写的特性,因此可以反复使用。USB 3.0接口速度更快,可以提高数据传输速度,同时向下兼容USB 2.0和USB 1.1接口。

USB闪存驱动器是一种方便的存储设备,因为它们非常小,可以轻松地放入口袋或钥匙链。它们也可以存储大量数据,容量范围从几GB到几TB不等。 USB闪存驱动器通常不需要电源,因为它们从计算机的USB端口获取电力。

sd卡和tf卡

https://baijiahao.baidu.com/s?id=1728073347207167716&wfr=spider&for=pc

为什么电脑接上usb数据线后会自动安装相关驱动,需要电脑连接网络吗

电脑接上USB数据线后会自动安装相关驱动是因为电脑需要识别并与连接的设备进行通信,以便能够使用设备。驱动程序是一些软件,它们告诉电脑如何与设备进行通信。因此,电脑需要安装适当的驱动程序才能正确地识别和使用连接的设备。

通常情况下,驱动程序已经预先安装在操作系统中。如果操作系统中没有该驱动程序,则电脑会自动从互联网上下载并安装所需的驱动程序。因此,连接网络是有助于电脑自动下载并安装驱动程序的。但是,如果已经有所需的驱动程序,电脑也可以通过读取本地存储设备上的驱动程序进行安装。

ubuntu和windos的简单比较和使用

dir


ls
ctrl+alt+T

windows 是各种盘符
ubuntu下是各种文件,没有盘符的概念
在这里插入图片描述
挂载在哪个分区
在这里插入图片描述

shell

取环境变量path中寻找程序

gcc -o hello hello.c
./hello
./hello weidongshan

在这里插入图片描述

设置环境变量

1 把文件复制到目录里
2sudo cp hello /usr/local/bin/hello2

临时
export PATH=$PATH:/HOME/BOOK


永久
1 修改 
sudo gedit /etc/environment
在path中添加内容, :/xxx/xxx”
2 
修改 ~/.bashrc,在最后添加
export PATH=$PATH:/HOME/BOOK

目录和文件操作命令

pwd
./

绝对路径 从根目录开始指定位置
cd ..

家目录
cd ~
cd -
cd /


mkdir 123
cd 123
echo abc > 1.txt
cd ..
rmdir 123

rm 123 -rf 递归 强制 删除


ls -l

文件拷贝
文件名中有空格会用单引号表示

cp 111.txt 222.txt
mv 222.txt ../
mv ../2.txt .

cat 2.txt 显示文件内容

touch xx。txt 修改文件时间 但不修改内容


文件权限和属性

ls -l hello
d 表示目录
- 表示常规文件

拥有者的权限
同组其他用户的权限
其他用户 r-x 可读可执行

read write x执行
chmod 777 hello
chmod -x hello
chmod +x hello 添加权限
chmod -R 以递归方式
ls -ld bin 查看目录信息

修改文件用户
chown [-R] 账户名:组名 文件或目录



在这里插入图片描述

find 和 grep

find   
grep 查找文件中符合字符串的内容


在这里插入图片描述
在这里插入图片描述
nw整词查找, 整个单词
r递归

压缩和解压缩

在这里插入图片描述

tar xjf  
tar xzf 
tar cjf  abc.tar.bz2 abc
tar czf  abc.tat.gz abc

网络

添加nat网卡
在这里插入图片描述

vi编辑器

gedit
https://www.runoob.com/linux/linux-vim.html

:set number 
: 250
一般模式可用的光标移动、复制粘贴、搜索替换等
dw           delete word
光标必须在字母开头

/word  向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)

:%s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)

在这里插入图片描述

嵌入式linux开发环境介绍

单片机/pc软件开发
有集成化的开发工具
兼具编辑/编译/运行的功能

window电脑 服务器 开发板
在这里插入图片描述

虚拟机双网卡

NAT网卡 用于和电脑 相连 通过windows 上网 转发 访问外网
桥接网卡用于和开发板相连

配置桥接网卡

1 使用外接的usb网卡
2 使用路由器
只需2选1

开发板通过网线连接到配套的有线网卡,usb连接到电脑
这个时候
虚拟机情况下, 要添加usb网卡作为桥接网卡,同时设置IP
Windos 和开发板都要设置IP,三方都为静态ip 网段要一致

插上网卡 连接到主机 ,在windows设备管理器中 查看 网络设备器, 查看 是否有
然后重新开启虚拟机, 添加新的网卡设置为桥接模式,在虚拟网络适配器中选择具体网卡,视频中为自动。 Vmnet

在虚拟机设置中配置网络, 设置静态IP。关掉后重新打开使设置生效。 第二个ens36就是设置的桥接网卡
在这里插入图片描述
windows下网卡断开状态
在这里插入图片描述
在这里插入图片描述
开发板上电后,window下的网卡禁止符号消失

之后打开串口软件,手工设置网卡ip
在这里插入图片描述
之后ping 192.168.5.10
修改配置文件设置 IP,修改一次即可,无需重复配置。修改开发板/etc/network/目录下
的 interfaces 文件,他视频里不同的开发板的代码还不太一样
stm32开头是 match
另一个是 atuo

如果存在问题,把域网络 防火墙等都关闭

在这里插入图片描述

路由器

开发板连接至路由器
ubuntu部分也连接至路由器
在这里插入图片描述

1 设置VMware 添加桥接网卡
2 选择网卡,用作桥接网卡, 虚拟网络编辑器以管理员身份运行
如果电脑是有线连接 就选择有线网卡
wifi就选择wifi网卡

windows和ubuntu自动获得ip,可以互通

3 三者ip配置

开发板的ip一般也是自动获得

如果之前配置了静态ip的文件,需要把他删掉,重启系统
在这里插入图片描述

安装软件文件

解压报错

window不支持linux的链接文件

开发板挂载nfs

nfs相当于 开发板上的网盘功能
1 权限 etc/export
2 启动 nfs服务
3 开发板挂载mount
home/book目录为 上述export中 cat 出现的

相当于 开发板和ubuntu共享某个目录下的文件

制作第一个app

需要用到板子的交叉工具链进行编译 获得的文件可以在板子上运行。 否则报错不支持的二进制文件

自己制作一个宏

他在
例如在那个 mobax 软件里
macros 栏中 录制一个宏 然后编辑挂载mout 目录
下面加一个回车

之后自动执行该代码
然后在开发板系统 到相应目录下,可以看到文件

在ubuntu下重新编译 输出hello,然后在开发板上执行程序,成功

gcc -o hello hello.c
arm-buildroot-linux-gnueabihf-gcc -o hello hello.c

第一个驱动程序

1 配置编译:内核,设备树,驱动
2 将该系列内容放到板子上
3 编译测试第一个驱动

make -j4
使用多核性能来提高编译速度

替换内核

在开发板下
uname -a
出现内核相关信息

挂载分区

更新内核 设备树
-r递归复制 f强制复制 d以前是链接文件,复制后仍旧为链接文件 从而使flash容量消耗减少

sync 同步一下,强制刷新flash文件

驱动程序

配置 编译内核,

将代码工程传到 ubuntu下的 与 开发板的共享文件夹下
修改 Makefile 文件“KERN_DIR”为自己的内核所在路径

需要根据开发板指定相应的内核源码路径

他视频里就是直接在 nfs目录下编译生成驱动文件的
然后 pdf中的拷贝操作就不需要了
在这里插入图片描述

在这里插入图片描述

lsmod

ls /dev/hello

cat /proc/dev

在这里插入图片描述

tsv flash 怎么划分,划分之后分区对应什么文件

他把 buildroot 编译出来的文件复制到windows下 然后再烧写到开发板上吗

此时更新内核了 内核时间变为2022
在这里插入图片描述
在这里插入图片描述

挂载

mount 把别的服务器某个目录 到 板子上的某个目录
-o option nolock 不然会卡住
-t 设备类型 nfs 类的

板子开关重启

file hello 查看文件信息

hello背后没那么简单

问1 .h / .c 有什么差别

.h头文件中声明, 头文件 函数需要什么参数 返回什么类型
c文件为实现

头文件在哪
系统目录
工具链目录
指定目录
-I dir

#include"../touh/speechmanager.h"

printf文件在哪
在库里面, 可以有系统目录,或自己指定

经常会遇到两个问题:
头文件中找不到 指定目录
函数未定义 缺了某些库

在这里插入图片描述

gcc 编译过程

电工
纸带打孔 - 机器码
开始用不同的助记符 代替 01
英文 汇编码
高级语言

在这里插入图片描述

gcc -v 查看详细过程

cc1 查找头文件 展开宏
编译

as .s文件转换为 .o目标文件 汇编

链接把多个程序组装在一起
collect2 操作
取库文件中 找到各种文件 然后 组装链接

4个步骤被一个 gcc合成

#ifdef
#endif

语法错误是在编译过程中发现的

gcc -E 可以
-s失败

gcc常用选项

在这里插入图片描述
各种 .o文件会链接到一起 形成最后的文件。一起编译,链接的坏处

假设有1000个文件。修改其中1个文件,
编译 但不链接,也就使分开编译

<> “”

当前目录 与 系统指定的工具目录

-v 显示查找目录

-v -I

要么使用 -I 选项 指明头文件目录
要么把文件放到默认的库里

静态库 动态库

编译的时候 如果 main。c使用到了 sub。c的函数 会失败
需要编译的时候把sub。c也加入。
ar 可以理解为压缩打包
在这里插入图片描述
动态库链接更为常用的方法为 使用 -l 省略库前缀与后缀
在library path中查找文件
可以把库文件放到该路径中,

小l 说明链接哪个库
大L 指明链接的库目录

使用file命令查看文件信息

在这里插入图片描述

链接时和运行时 不一样

链接时用L 表明库在哪里
运行时 可以通过把文件放到默认的文件夹下 比如 lib usr/lib
或者 给ld library path 添加

在这里插入图片描述

makefile

gcc命令的缺点在于队所有文件都要处理一遍, 可能就改了一个文件

修改了哪个文件,只要改哪个文件就行
如何判断哪些文件被修改了。
比较时间。 比较文件生成的时间, 时间更新的话就说明 更改了。
当依赖文件比目标文件新,执行新命令,重新生成文件

层层依赖,排查

执行 make命令

在这里插入图片描述
在这里插入图片描述

makefile语法

在这里插入图片描述
make 带上目标名 ,如果不带 就会默认执行第一个目标

如果目录下有与命令同名的文件

此时需要假想目标
.PHONY: clean

简单变量 延时变量

A:=10 即刻确定,定义时就确定
B = 10 使用时才确定

?= 如果是第一次定义才起效,如果在前面该变量已定义则忽略这句
+=

函数

P158

$ (foreach )f,$
filter
filter-out
wildcard pattern 判断哪些文件真实存在

patsubst 文字替换
从列表中取出每一个值,如果符合,将所有的 .c 替换为 .d ,

makefile 实例

改进支持头文件依赖,
百度 gcc生成依赖
gcc -M 打印出依赖
gcc -M -MF 把以来写入文件
生成d文件 存放

. $@.d 第一个. 表明隐藏文件。
https://www.bilibili.com/video/BV1w4411B7a4/?p=45&spm_id_from=pageDriver&vd_source=e7d12c9f66ab8294c87125a95510dac9

3.1.3 通用 Makefile 的解析

文件I/O

插上sd卡,sd卡内容访问,手动挂载
看是否自动挂载可以通过
cat /proc/mounts
在这里插入图片描述

对于真实硬件上的文件需要挂在后才能访问
mnt文件下的文件访问读写 就相当于是访问硬件上的文件

通过一系列标准接口 访问普通文件或者驱动程序

虚拟文件系统

也要先挂载
可以根据虚拟文件系统 查看内核信息

比如说 cat /proc/mounts 查看已经被挂载的设备
有 sysfs 系统文件
查看 ls /sys
查看内核有哪些 文件,然后手动挂载
mount -t sysfs none /mnt
这里none为 设备节点,对于虚拟系统,他不需要真实的设备节点。随便写

如何系统自动挂载

特殊文件 设备节点 硬件

ls /dev/* -l

char 字符设备驱动程序
block 块设备驱动程序

主设备号 次设备号,内核中的不同设备节点通过 主设备号确定对应哪一个驱动,通过次设备号确定对应哪一个设备号的硬件。

4.3 怎么知道这些函数的用法?

man 手册 多个手册,一个找不到去另一个找
man 2 open
man printf
man 7 printf
man 3 printf
man 2 open 可以加入 用户权限 第三个参数
不同的函数使用费干翻噶 调用 不同的头文件

mmap 可以把文件的内容映射给应用程序,可以把显存映射给应用程序
映射成功后直接把buf 里内容写入

系统调用怎么进入内核

linux系统中一切都是文件。
app 层面 读写文件,调用内核。
对于普通文件,使用文件系统相关代码去读写磁盘。
对于设备硬件,找到对应驱动程序,调用相关函数
应用程序怎么进入内核态

uclibc 是嵌入式裁剪的

app层面都是通过 swi svc 导致异常进入内核

在这里插入图片描述
在这里插入图片描述
ABI 应用二进制接口
内核中有一个系统调用函数的指针数组。
内核把 库函数传入的值取出后,就可以把值作为下标。在数组里找到调用的函数。

在这里插入图片描述
字符设备节点 以主备设号在内核里找到驱动。以后使用该驱动赖操作硬件

另一个以文件系统代码来操作硬件设备

framebuffer

汉字编码

如果不指定“-finput-charset”,GCC 就会默认 C 程序的编码方式为 UTF8,即使你是以 ANSI 格式保存,也会被当作 UTF-8 来对待。

但是视频中没有指定,是按照 c程序的编码来进行执行的。 源代码的保存格式不一样 ,执行效果不一样

这个时候 利用相关指令

文件是以什么编码 执行以什么编码

6.4.2 常见错误的解决方法

echo 'main(){}'| arm-buildroot-linux-gnueabihf-gcc -E -v -

他会显示各种信息,这里是把main函数设立,然后传到后面的交叉编译工具链中编译,查看编译信息

以后缺少什么头文件,可以手动把文件放到这些目录中。
库文件也是同理

6.6.3 怎么在指定位置显示一行文字

位置发生改变时
x - 0 = x1 - ao a0 = x1 - x
y - 0 = y1 - a1 a1 = y1 - y
在这里插入图片描述
单位为 1/64 像素
意味着 要除以 1/64 , 就是乘以 64.
比如说单位是1,那么就是1, 单位是 1/2 那么就要乘2. 尺度缩小为多少,数值要乘上多少倍

7.2 输入系统框架及调试

7.3.3 获取设备信息

内核中的文件 ioctl
包含相应的头文件 input.h ,在工具链中提供
所以要 include《linux/input.h》

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue2+wangeditor富文本域

vue2wangeditor富文本域 效果图安装依赖初始化简约模式自定义模式图片设置只允许 base64 方式支持图片服务器 更多配置项目依赖项目代码 效果图 安装依赖 npm i wangeditor/editor wangeditor/editor-for-vue初始化 <template><div class"editor-box">…

IIS 日志解析,增强 IIS 服务器安全性

企业严重依赖 Microsoft Internet 信息服务 &#xff08;IIS&#xff09; 服务器来托管其网页和 Web 应用程序&#xff0c;以及存储其文件。请务必妥善保护您的 IIS 服务器&#xff08;包括 Web 和 FTP&#xff09;。 什么是 IIS 日志 IIS 日志是 Microsoft IIS Web 服务器上…

柔顺机构学读书笔记1:悬臂梁变形

题目&#xff1a; 如图考虑悬臂梁&#xff0c;材料各向同性&#xff0c;即各个方向上的弹性模量和强度都相同。如果在x方向上作用一个可使最大应力等于屈服强度 S S S的力 F x F_x Fx​时&#xff0c; x x x轴方向的变形为多少&#xff0c;书上给出了答案&#xff1a; 我们来验…

网易有道财报:网易有道2023财年收入将强劲增长,亏损将减少?

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 预计2023年收入增长强劲&#xff0c;净亏损收窄 猛兽财经认为网易有道&#xff08;DAO&#xff09;今年是有能力实现更多的收入增长和减少亏损的。具体来说&#xff0c;我们预计网易有道的收入将在2023财年增长至少20%&am…

Semantic Kernel VS LangChain

每当向他人介绍 Semantic Kernel&#xff0c;会得到的第一个问题就是 Semantic Kernel 类似于 LangChain 吗&#xff1f;或者是 C# 版本的 LangChain 吗&#xff1f;因此我总结了这篇文章。 微软MVP实验室研究员 张善友 深圳友浩达 CTO & 首席架构师&#xff0c;微软最有价…

进程间通信-system V共享内存

文章目录 1. system V共享内存1.1 共享内存示意图 2. 共享内存函数2.1 shmget函数2.2 代码实现2.2.1 shmat2.2.2 shmdt 3. 信息量 1. system V共享内存 system V的意思是一套标准&#xff0c;共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间&#xff…

AI遇上建筑设计,是出圈还是翻车?

AIGC 落地&#xff0c;始于场景&#xff0c;终于价值。 去年以来出现了 AIGC 热潮&#xff0c;引发了 AIGC 及其应用话题的爆发性增长&#xff0c;不少人感慨强人工智能的时代已经离我们不那么遥远了。但是在热潮的另一面&#xff0c;我们看到真正能落地的场景依然是凤毛麟角&a…

【C语言】结构体指针

结构体指针 结构体基础知识注意对于成员的赋值 结构体指针指向结构体变量的指针结构体指针与结构体成员指针用结构体指针引用结构体成员 结构体 基础知识 初识结构体&#xff0c;可以先看这篇浅显易懂的文章结构体–基础篇 所谓结构体&#xff0c;是一组类型可以不同的相关变…

部署输配电线路火灾隐患排查治理

输电线路防山火在线监测装置 一、产品描述&#xff1a; 电力设施为了远离人们的生活区域选择部分扎根在森林里面&#xff0c;减少发生触电事故的发生。但是提到森林就不得不说其中一个山火问题&#xff0c;山火灾害对建设在森林的电力设施造成的损害不可预估&#xff0c;为保障…

CodeForces.1806A .平面移动.[简单][判断可达范围][找步数规律]

题目描述&#xff1a; 题目解读&#xff1a; 给定移动规则以及起始点&#xff0c;终点&#xff1b;分析终点是否可达&#xff0c;可达则输出最小步数。 解题思路&#xff1a; 首先要判定是否可达。画图可知&#xff0c;对于题目给定的移动规则&#xff0c;只能到达起始点(a,b…

Go 开发实践:手把手教你搭建一个登录功能

本文首发自「慕课网」 &#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注"慕课网"及“慕课网公众号”&#xff01; 作者&#xff1a;Codey|慕课网讲师 用 Go 语言搭建简易登录功能 如果你最近刚学习Go 语言基础特性&#xff0c;对 …

《深入理解BigDecimal:揭秘钱财计算的核心技术》

文章目录 《深入理解BigDecimal:揭秘钱财计算的核心技术》***\*一、BigDecimal概述\*******\*二、BigDecimal常用构造函数\****2.1、常用构造函数2.2、使用问题分析***\*三、BigDecimal常用方法详解\****3.1、常用方法3.2、BigDecimal大小比较***\*四、BigDecimal格式化\*****…

【正点原子STM32连载】 第二十章 基本定时器实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第二十…

字符串匹配算法--KMP算法--BM算法

该算法解决的是字符串匹配问题&#xff0c;即查看字符串中是否含有完整的匹配字符串。如在java的string的contains方法匹配问题最简单的就是暴力破解了。在java的contains也是这么实现的&#xff0c;效率是低一点的。如果想要更快的速度可以自己写KMP算法。 代码实现体验 还未…

chatgpt赋能Python-python_numpy怎么用

Python与Numpy&#xff1a;简介 Python是一种高级编程语言&#xff0c;它具有简洁的语法和广泛的应用领域。Numpy是一个为Python提供高效数学库的开源库&#xff0c;它允许进行高速数值计算和数据处理。 对于那些正在开始使用Python和Numpy的初学者&#xff0c;这篇文章将向您…

CANoe使用教程

目录 1.CAN IG使用 2.Visual Sequence 自动发送报文序列&#xff0c;可以设置多个visual sequence&#xff0c;可用于重复的网络模拟和write窗口输出&#xff0c;比IG灵活&#xff0c;比CAPL简单 3.CANoe中的系统变量和环境变量都是一种用于存储和传递数据的变量&#xff0c;…

linux部署yolov5

Linux配置 LibTorch 和 OpenCV LibTorch 下载地址&#xff1a;https://pytorch.org/get-started/locally/ 直接解压即可 OpenCV 下载地址&#xff1a;https://opencv.org/releases/ 需要配置ffmpeg环境 export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/home/workspace/dengzr/li…

嵌入式Linux应用开发笔记:GPIO编程

文章目录 目的基础说明代码示例数字输出数字输入外部中断 总结 目的 GPIO嵌入式设备中最基础的外设&#xff0c;使用上也是非常频繁的。这篇文章将记录下应用程序中GPIO操作相关内容。 这篇文章中内容均在下面的开发板上进行测试&#xff1a; 《新唐NUC980使用记录&#xff1…

15、STM32驱动sht35温湿度传感器

本文使用模拟IIC驱动sht35温湿度传感器 踩坑点&#xff1a;购买的模块IIC上拉电阻为10KΩ&#xff0c;会导致IIC不稳定&#xff0c;抗干扰差&#xff0c;容易导致时序错误&#xff1b;建议更换为4.7KΩ 一、CubeMx配置 其余默认&#xff0c;生成工程 1、us精确延时 Delay_Dr…

2023年电子、通信与控制工程国际会议(SECCE 2023)

会议简介 Brief Introduction 2023年电子、通信与控制工程国际会议(SECCE 2023) 会议时间&#xff1a;2023年8月11日-13日 召开地点&#xff1a;韩国济州岛 大会官网&#xff1a;www.isecce.org 2023年电子、通信与控制工程国际会议(SECCE 2023)将围绕“电子、通信与控制工程”…