嵌入式linux
文章平均质量分 82
liefyuan
一招鲜吃变天!
展开
-
【嵌入式系统】芯片性能评估数据
BogoMIPS Linux操作系统中衡量 计算机处理器运行速度的一种尺度。Bogo是Bogus(伪)的意思;MIPS是每秒百万条指令。新建一个进程需要最小的内存空间本机为8M,具体可通过ulimit -s查看。新建一个进程需要最小的内存空间本机为8M,具体可通过ulimit -s查看。对比一下我的电脑酷睿 i7的16核的数据。原创 2024-01-19 16:44:57 · 1028 阅读 · 0 评论 -
【RV1103/RV1106】使用Buildroot构建文件系统支持Bluetooth--交叉编译Bluez5
Bluez的依赖:fill:#333;color:#333;color:#333;fill:none;BluezglibdbusreadlineBluezlibffizlibgettextlibiconvexpatncursesBuildroot源码地址:https://buildroot.org/downloads/buildroot-2023.02.6.tar.gzBuildroot仓库下载地址:http://sources.buildroot.net。原创 2024-01-09 10:09:47 · 1767 阅读 · 1 评论 -
Bluez交叉编译
依赖:fill:#333;color:#333;color:#333;fill:none;原创 2024-01-09 09:44:51 · 997 阅读 · 0 评论 -
PCA9685使用终极总结
(2).舵机的控制需要MCU产生一个20ms的脉冲信号,以0.5ms到2.5ms的高电平来控制舵机的角度。用i2cdump查看器件所有寄存器的值,这个命令可以查看器件所有寄存器的值,在实际测试时很好用。2.0ms-----------135度;2.5ms-----------180度;0.5ms-------------0度;2.5% 对应函数中占空比为250。1.0ms------------45度;1.5ms------------90度;0x40:表示总线上 设备地址为0x40的这个设备;原创 2023-12-20 12:03:30 · 582 阅读 · 0 评论 -
【问题解决】Buildroot文件系统dropbear 上位机scp命令Permission denied, please try again.
来修改一下密码就可以了。原创 2023-12-15 17:23:45 · 317 阅读 · 0 评论 -
【RP-RV1126】配置一套简单的板级配置
buildroot官方配置完整编译需要30分钟。我想搞一个简单的配置,可以快速编译,快速测试一些简单的功能。原创 2023-11-02 12:03:02 · 804 阅读 · 0 评论 -
【嵌入式Linux】编译应用和ko内核模块Makefile使用记录
kbuild中会预定义一些变量,如obj-y、obj-m,用来指定要生成的.o目标文件。第二种是将驱动程序作为模块单独编译成.ko文件,而不编译进内核中,然后手动加载,即obj-m变量。本例中将DriverFramework.o赋值给obj-m变量,就是采用第二种模式,单独生成一个独立的DriverFramework.ko文件。变量表示的这个目录下存放该版本linux内核源码,其中调用的shell指令uname -r用来打印该内核的版本号。变量的值在赋值的时候立即展开,并且在后续的使用中不再改变。原创 2023-10-26 18:15:48 · 1749 阅读 · 0 评论 -
交叉编译glib
GLib 是一个通用的、可移植的实用程序库,它提供了许多有用的数据类型、宏、类型转换、字符串实用程序、文件实用程序、主循环抽象等。下载地址:https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.17.tar.gz。zlib下载地址:https://github.com/madler/zlib/releases/tag/v1.3。libffi下载路径:https://github.com/libffi/libffi/releases/说明zlib没有编译好!原创 2023-10-20 17:53:14 · 622 阅读 · 1 评论 -
【基础知识】menuconfig的用法之defconfig和.config
uboot、kernel、Busybox、Buildroot…都是使用menuconfig来进行配置的。一般需要指定指令集架构ARCH=arm。原创 2023-10-16 23:31:46 · 1111 阅读 · 0 评论 -
【RP-RV1126】烧录固件使用记录
部分烧录就是只烧录部分更改的内容,没有更改的部分就不动。生成的文件都是链接,我就写了个脚本把它们原文件拷贝出来。包含了所有的部件,烧录后可以直接运行。原创 2023-10-04 23:02:20 · 851 阅读 · 0 评论 -
【RV1103】Luckfox Pico RV1103 开发记录
可以看出来,他们内容上的区别仅就各自打开了对应板子的存储方式的支持。应该是一个Uboot编译配置文件的补丁。常按住Pico 开发板的Boot按键,然后插入USB,此时USB设备栏会弹出设备号(这里是211);把编译出来的这些文件都拷贝到Windows下去。看瞎了眼才发现,GPIO轮流做庄。查看spi-nand配置好的信息。可以看出来就是设备树不一样。原理图什么的都是部分。说明是个补丁无疑了!原创 2023-09-28 13:48:45 · 3759 阅读 · 5 评论 -
【全志V3s】SPI NAND Flash 驱动开发
SLC工艺2KB*65536页10万次擦写次数焊好以后用CH341A读了一下。原创 2023-09-18 01:09:54 · 10951 阅读 · 22 评论 -
【Buildroot】学习记录(2)配置注释
Buildroot是linux平台上一个构建嵌入式linux系统的框架.整个Buildroot是由Makefile(*.mk)脚本和Kconfig(Config.in)配置文件构成的,因此可以像配置linux内核一样执行 make menuconfig 进行配置,编译出一个 完整的,可以直接烧录到机器上运行的Linux系统文件(包含bootloader,kernel,rootfs和rootfs中的各种库和应用程序)获取: 获取源代码解压: 解压源代码补丁: 针对缺陷修复和增加的功能应用补丁。原创 2023-05-13 00:54:38 · 4505 阅读 · 0 评论 -
【嵌入式Linux基础】启动初始化程序--init程序
在嵌入式设备中,你最有可能遇到三个初始化程序是BusyBox init、System V init 和 systemd。Buildroot默认只构建BusyBox init,你也可以选择构建所有三个初始化程序。Yocto项目默认构建System V init,当然其他两种也可以选择。类别systemd复杂性低中高启动速度快慢中所需shellashash 或 bash无可执行程序数量0450(构建系统时的配置支持的C库任意任意glibc大小(MB)00.1。原创 2023-06-04 16:14:29 · 1588 阅读 · 0 评论 -
【嵌入式Linux】MBR分区表 和 GPT分区表
GPT分区表中有一个比较重要的概念是LBA, 翻译为中文可解释为逻辑区块地址。是描述存储设备上数据所在区块的通用机制,一般用在硬盘或者SD卡这种记忆设备,我们俗称扇区。原创 2023-05-12 01:40:37 · 1593 阅读 · 0 评论 -
【RV1126】移植kaldi实时语音识别
将文件夹里面的.bin,.param,.txt文件拷贝到开发板上去,与可执行文件放一起。modified_beam_search:改进集束搜索算法。modified_beam_search:改进集束搜索算法。运行起来后对着板子的MIC说话,背诵一个古诗看看。greedy_search:贪心搜索算法。greedy_search:贪心搜索算法。将这两个可执行文件拷贝到开发板上去。然后运行,出现下面信息代表正常!在下面会用到解码的方法选择。文件将SDK的交叉编译器(原创 2023-04-26 00:59:07 · 2170 阅读 · 2 评论 -
【RP-RV1126】Ubuntu上配置Buildroot Qt 开发板远程开发调试环境(SSH)
描述一个场景,在ubuntu上的qtcreator上编写了一个带UI的程序,点击左下角的运行,就可以在开发板上看到效果!以下都是为了实现这个场景。原创 2023-04-22 02:04:40 · 3069 阅读 · 0 评论 -
嵌入式Linux(10):杂项设备和字符设备驱动总结
相对来说,如果是操作几个GPIO的操作,其实使用简单的杂项设备驱动就可以了,字符驱动相对会复杂一点。原创 2023-04-21 09:33:31 · 200 阅读 · 0 评论 -
嵌入式Linux(9):字符设备驱动--自动创建设备节点
在上一节中,使用insmod加载模块后,还需要通过mknod命令来手动创建设备节点,这样太麻烦了。需要加入自动创建设备节点的功能。mdev是udev的简化版本,是busybox中所带的程序,最适合在嵌入式系统。udev是一种工具,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。设备文件通常放在/dev目录下。使用udev后,在/dev目录下就只包含系统中的真正存在的设备了。udev一般用在PC上的linux中,相对mdev来说要复杂一些。原创 2023-04-21 09:32:42 · 1072 阅读 · 0 评论 -
嵌入式Linux(8):字符设备驱动--注册字符类设备
杂项设备字符类设备文件:include/linux/cdev.hdev_t dev;定义一个cdev结构体。使用cdev_init函数初始化cdev结构体成员变量。第一个:要初始化的cdev结构体//实际就是把文件操作集写ops使用cdev_add函数注册到内核。第一个:cdev的结构体指针。第二个:设备号。第三个:次设备号的数量。创建字符设备节点字符设备注册完以后不会自动生成设备节点(杂项设备在注册完以后就会自动生成设备节点)。原创 2023-04-21 09:32:04 · 571 阅读 · 0 评论 -
嵌入式Linux(7):字符设备驱动--申请设备号
将我们的主设备号和次设备号组成一个dev_t类型。第一个参数是主设备号,第二个参数是次设备号。dev_t (linux/types.h)类型:是用来保存设备号的,是一个32位数。高12位是用来保存主设备号,低20位是用来保存次设备号的。可以看出设备号被优先分配到255~234的范围内。需要明确知道系统里面的哪些设备号没有被使用。Linux提供了几个宏定义来操作设备号。使用动态分配会优先使用255~234。次设备号的位数,一共是20位。原创 2023-04-21 09:31:32 · 908 阅读 · 0 评论 -
嵌入式Linux(6):驱动模块传参
驱动传参就是在安装驱动模块(.ko文件)的时候传递参数给驱动模块。原创 2023-04-21 09:25:23 · 723 阅读 · 0 评论 -
嵌入式Linux(5):物理地址到虚拟地址映射
在Linux上面如果想要操作硬件,需要先把物理地址转换成虚拟地址。因为Linux使能了MMU,所以我们在Linux上不能直接操作物理地址。内核给我们提供了相关的函数。原创 2023-04-21 09:23:24 · 1349 阅读 · 0 评论 -
嵌入式Linux(4):应用层和内核层数据传输
Linux一切皆文件!文件对应的操作有打开,关闭,读写。设备节点对应的操作也有打开,关闭,读写。原创 2023-04-21 09:21:22 · 643 阅读 · 0 评论 -
嵌入式Linux(3):设备驱动--杂项驱动(MISC)
字符设备:IO的传输过程是以字符为单位的,没有缓冲。比如I2C,SPI都是字符设备。块设备:IO的传输过程是以块为单位的。跟存储相关的都属于块设备驱动。比如:TF卡,NAND flash等。网络设备:与前两个不一样,这个是以socket套接字来访问的。杂项设备属于字符设备的一种。杂项设备会自动生成字符节点。我们的系统里面有很多杂项设备,可以通过输入命令来查看。杂项设备除了比字符设备代码简单,还有别的区别吗?原创 2023-04-21 09:20:40 · 714 阅读 · 0 评论 -
嵌入式Linux(2):将Helloworld驱动编译到内核
目录下,这里就是众多字符设备驱动的地方。在这个目录下新建一个目录。上电信息有打印hello world说明驱动加载进去了。,然后进入hello目录,新建文件。路径下)里面把我们写的包含进入。1、进入内核源码目录,然后进入。接下来就要在上一级的目录(将下面这一行添加进去。Makefile文件。原创 2023-04-21 09:20:30 · 720 阅读 · 0 评论 -
嵌入式Linux(1):make menuconfig图形化界面
目录下面有很多默认的写好的配置文件。相当于饭店里面已经有的特色菜,你不知道该点什么的时候就直接拷贝这个特色菜到根目录下改个名字为.config就可以了。当make menuconfig保存退出以后,Linux会将所有的配置选项以宏定义的形式保存在。因为内核会默认读取Linux内核根目录下的.config作为默认的配置选项。会在linux kernel源码下载arch目录下根据。输入“/”即可弹出搜索界面,然后输入要搜索的内容即可。退出分为保存退出和不保存退出。按空格键循环选择三个状态。原创 2023-04-21 09:19:53 · 1573 阅读 · 0 评论 -
【100ASK_T113_Pro】Tina系统初编译
此套源码文档,是从全志原厂获取,适合做产品批量使用,主要是熟悉全志sdk开发流程的同学,内置了比较丰富的组件和示例程序,但是框架过于复杂,不适合新手,我们不会用此套框架进行授课。使用phoenixcard4.2.8.zip烧录启动卡到SD卡里面去。请输入提取码 276 提取码:1yl3。还有很多编译相关的配置参考官方文档。运行正常,但是屏幕没有显示。原创 2023-02-13 02:08:17 · 857 阅读 · 0 评论 -
【100ASK_T113_Pro】Buildroot系统初编译
此套SDK基于 Buildroot 主线版本,整合了 全志较新的 Linux Kernel Bootloader,最大程度简化了操作难度,比较适合用来上手学习,我们也会作为授课使用的主要支持SDK。对于做产品的同学,目前组件支持并不是特别完整,请慎重考虑。buildroot_100ask_t113-pro.tar源码百度网盘:链接:https://pan.baidu.com/s/1Ov_ECC2HJBkfoIUMbufEIw?pwd=p8va提取码:p8va。原创 2023-02-13 02:06:52 · 1633 阅读 · 2 评论 -
并发与竞争(五)互斥锁
同一个资源同一个时间只有一个访问者在进行访问,其他的访问者访问结束以后才可以访问这个资源。这就是互斥。 互斥锁和信号量值为1的情况很类似,但是互斥锁更简洁,更高效。不过在使用中需要注意的事项也就更多。全部代码led.c以上代码编译成.ko文件app.c以上代码编译成app.armelf执行文件测试:原创 2022-12-07 18:32:56 · 552 阅读 · 0 评论 -
并发与竞争(四)信号量
两个特点: 自旋锁是通过“原地等待”的方式来处理并发与竞争的,所以被保护的临界区不能太长,以免造成对CPU资源的浪费。但是有些情况我们必不可免的要长时间对一些资源进行保护。这时候就可以使用信号量了。什么是信号量呢? 举个例子,现在有一个电话亭,里面只有一个公共电话。某天A去打电话,恰好过了一会B也来了要打电话。但是此时A在打电话,所以B就只能等待A打完电话才可以打。如果是自旋锁的,B就要一直等待着A打完。但是A的事情很重要,需要打很长时间电话。这时候自旋锁就不合适了。那A是不是就可以告诉B,你先去休息一会原创 2022-12-07 18:05:19 · 492 阅读 · 0 评论 -
并发与竞争(三)自旋锁
自旋锁是为了实现保护共享资源提出的一种锁机制,也是内核中比较常见的锁机制。自旋锁是以“原地等待”的方式解决资源冲突。即当线程A获取到自旋锁以后,此时线程B也想获取到自旋锁。但是线程B获取不到,只能“原地打转”(仍然占用CPU,不会休眠),不断尝试获取自旋锁,直到获取成功,然后才退出循环。如上,在加自旋锁和解自旋锁中间的区域就是“临界区域”。如上,这是一个设备节点的驱动,第一次程序A打开了该驱动是可以顺利打开的不会有问题,并且打开后就会把全局变量,这样其他程序再想打开该驱动就会失败并返回错误。程序A原创 2022-12-07 11:21:43 · 543 阅读 · 0 评论 -
并发与竞争(二)原子操作
原子操作中的“原子”指的是化学反应中的最小微粒。在Linux中用原子来形容一个操作或者一个函数是最小的执行单位,是不可以被打断的。所以原子操作指的是该操作在执行完之前不会被任何事物打断。原子操作一般用于整形变量或者位的保护。比如,定义一个变量a,如果程序A正在给变量a赋值,此时程序B也要来操作变量a,这时候就发生了并发与竞争。程序A的操作就有可能被程序B打断。如果我们使用原子操作对变量a进行保护,就可以避免这种问题。Linux中定义了一个叫做和的结构体来描述原子变量,其中是用于32位系统,是用于64位系统。原创 2022-12-07 00:05:19 · 1094 阅读 · 0 评论 -
并发与竞争(一)概念
三个概念:下面这张图描述的是单核CPU的“并发”这个概念:并发会造成多个程序同时访问一个共享资源,这时候由并发同时访问一个共享资源而产生的问题就是竞争。Linux是一个多任务的操作系统,并发和竞争在Linux中非常的常见。所以在编写Linux驱动的过程中就要考虑并发与竞争。否则在访问共享资源的时候容易出问题,而这些问题往往不容易排查,很难定位。这里讨论的是内核空间中的并发,用户空间中的并发不讨论,现在有两个相同的驱动程序A和B,这两个驱动程序并发执行,并且它们都要修改变量c。情况一是理想情况,但是我们根本原创 2022-12-06 21:30:49 · 181 阅读 · 0 评论 -
嵌入式Linux:V3s 单总线驱动开发(DHT11)温湿度
查看一下设备节点有没有出来:可以!原创 2022-10-29 02:35:13 · 961 阅读 · 0 评论 -
嵌入式Linux:串口传输文件的工具lrzsz软件的移植
在网络没有通的时候,串口才是YYDS!喏,这个就是咯。原创 2022-10-25 02:01:33 · 1757 阅读 · 0 评论 -
嵌入式Linux:V3s key驱动开发
参考:https://blog.csdn.net/lengyuefeng212/article/details/120027994。1、文件:arch/arm/boot/dts/sun8i-v3s.dtsi 注释掉一下两部分。因为PG5是SDC1接口的D3引脚,所以使用它之前需要将SDC1的设备树信息注释掉!每按下一次按键,就会打印出一条信息。查看节点:就是那个irq节点。这样按键就可以控制灯光了。原创 2022-10-25 00:41:06 · 812 阅读 · 0 评论 -
嵌入式Linux:V3s led驱动开发
选择know_hosts选项回车,进入另一个文件界面,然后把最后一行秘钥删除,然后保存,退出。直接操作sysfs的GPIO控制失败了,应该是设备树里面有声明了!PG1是SDC1的SDC1_CMD口。可以,控制灯光没有问题。如下出现了led0节点。原创 2022-10-24 01:03:29 · 1991 阅读 · 0 评论 -
Mangopi MQ-R:T113-s3(四)Tina系统 适配LCD屏幕
参考大佬:https://www.gloomyghost.com/live/20220808.aspx$ 7$ make$ mboot$ pack使用phoenixcard4.2.8.zip烧录启动卡到SD卡里面去。原创 2022-10-21 01:01:09 · 5227 阅读 · 5 评论 -
嵌入式Linux:移植USB接口的RTL8188EUS、RTL8188ETV WIFI模块
注意, wpa_supplicant.conf 文件对于格式要求比较严格,“=”前后一定不能有空格,也不要用 TAB 键来缩进,比如第 4 行和 5 行的缩进应该采用空格,否则的话会出现 wpa_supplicant.conf文件解析错误!之前用的是linux4.X的kernel,这个配置不是在Intersil devices子目录下的而是在上一个配置目录上的一眼就可以看到的。ssid 是要连接的 WIFI 热点名字,这里我要连接的是“MERCURY_6666”这个 WIFI 热点。原创 2022-10-15 20:27:44 · 5580 阅读 · 2 评论