- 2025-03-06
-
回复了主题帖:
【树莓派Pico 2 RP2350开发板】环境搭建
这玩意每次下载太麻烦了, 哪个pico 插件每次还需要断电按着boot按键才行。 这都25年了也不整个reset
-
发表了主题帖:
【正点原子i.MX93开发板】测评 + 六、C语言读取和写入字符设备
简介
在上一个章节中我们实现了字符设备在开发板上的挂载和卸载,但是并没有完善对应的写入和读取的逻辑。 本章节我们将完善读取和写入的逻辑然后使用交叉编译工具编译出C语言的程序然后再开发板上运行从而实现使用C语言程序对字符设备的读取和写入。
在上一个章节中我们已经完成了字符设备的大概框架,但是我们并没有对其中的读操作和写操作进行控制。 我们基于上一个章节的代码快速的实现一下读写的操作逻辑。 代码如下所示。
static ssize_t chrdevbase_read(struct file *filp, __user char *buf, size_t count,
loff_t *ppos)
{
int ret = 0;
printk("chrdevbase_read\r\n");
/*把内核数据拷贝到缓冲区 */
memcpy(readbuf, kernelData, sizeof(kernelData));
/* 驱动给用户程序传递数据的时候需要使用cope_to_user() */
copy_to_user(buf, readbuf, count);
if(ret == 0)
{
printk("Kernel readed data :%s\r\n", readbuf);
}else{
}
return 0;
}
static ssize_t chrdevbase_write(struct file *filp, const char __user *buf,
size_t count, loff_t *ppos)
{
int ret = 0;
/* 用户给驱动程序传递数据的时候需要使用copy_from_user() */
ret = copy_from_user(writebuf, buf, count);
if(ret)
{
printk("Kernel received data :%s\r\n", writebuf);
}else{
printk("Kernel did not received data");
}
printk("chrdevbase_write\r\n");
return 0;
}
这里需要注意的一点是,如果是应用程序需要在内核内存和应用内存做数据交换的话, 不能直接操作。 必须使用linux提供的读取或者写入函数等。 比如说cope_from_user() 或者cope_to_user() 来完成数据的交换。
其他的代码并没有变更, 之后我们需要使能交叉编译工具, 直接对当前的目录进行make从而生成模组文件.ko
然后新建一个C程序来控制字符设备。
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char * argv[])
{
int ret = 0;
int fd = 0;
char * filename;
char readbuf[100], writebuf[100];
static char userData[] = {"Test userData writing !"};
if(argc !=3)
{
printf("Error usage!\r\n");
}
filename = argv[1];
fd = open(filename, O_RDWR);
if(fd < 0)
{
printf("Can't open file %s\r\n", filename);
}
if(atoi(argv[2]) == 1)
{
ret = read(fd, readbuf, 50);
if(ret < 0)
{
printf("read file %s failed!\r\n", filename);
}else {
printf("App read data :%s\r\n", readbuf);
}
}
if(atoi(argv[2]) == 2)
{
memcpy(writebuf, userData, sizeof(userData));
ret = write(fd, writebuf, sizeof(userData));
if(ret < 0)
{
printf("Write file %s failed!\r\n", filename);
}else {
printf("App write data :%s\r\n", writebuf);
}
}
ret = close(fd);
if(ret < 0) {
printf("close file %s falied!\r\n", filename);
}
return 0 ;
}
那么当我们使用交叉编译工具编译完毕后这个代码的话, 他就可以在我们的开发板上运行,从而来控制我们之前的字符设备。 当读取的时候,会将字符设备驱动中的Hello eeworld打印出来。 那么当写入的时候驱动程序也会将Test userData writing !给打印出来。从而实现对驱动的控制。
这里使用交叉编译工具有点麻烦, 首先需要source 使能环境变量从而能够能直接在当前的shell访问交叉编译工具。
如果你直接来编译这个C文件的时候可能会出现找不到c语言标准库的情况。
这是因为没有制定好sysroot的路径,从而使其找不到对应的库文件。
之后我们在这个地方看到一共有两个环境, 第一个是Arm的, 第二个是linux 的, 因为我们要在Arm的芯片上运行所以我们需要选择第一个。
aarch64-poky-linux-gcc --sysroot=/opt/fsl-imx-xwayland/6.1-mickledore/sysroots/armv8a-poky-linux -o chrdevapp chrdevapp.c
使用上述命令重新编译,即可完成的chardevapp.c 的编译。
然后我们使用xftp工具将编译好的ko和可执行文件上传到开发板上。 如下图所示。
之后登录到MX93开发板上, 使用上一个章节中介绍的命令将驱动程序进行重新挂载,并且创建设备描述
此时这个char设备已经挂载完毕。 我们可以尝试使用编译好的C语言可执行文件来操作这个字符设备。 首先我们尝试使用C语言程序读取字符设备驱动中的数据。
此时可以看到已经返回我们定义的Hello eeworld. 之后我们再尝试来写入一个数据到字符设备里。
此时可以看到字符设备驱动已经正确的读取到了我们写入的数据。
- 2025-03-05
-
发表了主题帖:
【树莓派Pico 2 RP2350开发板】 测评 【四】 驱动ST7735 1.8寸TFT屏幕
本帖最后由 御坂10032号 于 2025-3-5 17:01 编辑
简介
本文将概述如何通过使用RP2350在micropython的环境下驱动ST7735. 通过阅读这篇文章你可以在五分钟之内驱动你自己的屏幕.
这块屏幕是一块来自合宙的TFT1.8 驱动芯片为ST7735. 大家购买的时候看哪家便宜购买哪一家的就行了.
接线如下:
TFT1.8 ST7735
PICO2
3V3
3V3
GND
GND
SCL
GPIO10
SDA
GPIO11
DC
GPIO20
RST
19
CS
18
这里的PIN定义可以自定义修改,之需要对应pico的数据手册即可. 如下图所示只要在初始化的时候指定对应的SPI, 然后引脚对的上就行.
之后打开Thonny, 将程序上传到开发板上. 然后在main.py中修改你自定义的PIN引脚.
如果你运行程序的时候出现边缘花屏的情况,请尝试修改下面的变量的状态.
display085 = False
之后运行main.py即可. 效果如下所示.
[localvideo]df1217dfd6fbd8f13d6111c84d8b7223[/localvideo]
可以看到效果还是蛮不错的,如果全屏幕刷新的话帧率大概在20多帧. 之后我将使用rp2040来同样驱动一下这个屏幕做一下对比.
附件如下:
-
发表了主题帖:
[经验] 【树莓派Pico 2 RP2350开发板】 测评 【三】基于CSDK运行FreeRtos
简介
本来是想在尝试跑一个LVGL在RP2350上的,但是找了一圈没有找到很详细的教程. 于是转换思路, 在搜索了一圈看看如何在rp2350的上运行freeRTOS, 后来在Youtube上找到了一个博主提供了一个RTOS的模版是基于RP2040的.经过我的一番尝试,在不开启RISC-V核心的情况下可以正常的在RP2350上运行,现在我来分享一下步骤.
1- 首先clone 仓库信息,执行命令如下所示
git clone https://github.com/LearnEmbeddedSystems/rp2040-freertos-template.git
2- 由于仓库内的lib引用了freeRtos的内核,所以要执行子模块初始化和更新
git submodule init
3- 更新子模块
git submodule update
之后在进入文件夹, 如果安装好vscode code插件的话可以使用code . 打开
这里需要提前安装好插件商店里的Raspberry Pi Pico插件
如果安装这个插件的话,它会提示你把当前的项目导入为pico项目,点击确认即可. 现在这个项目的结构就很清晰了. lib下面是rtos的库,代码在src下, cmakelist配置了对lib下库的引用. 在我们开始编译这个程序之前还有两件事需要处理一下.
首先在顶层文件的cmakelist中增加下面的内容
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
这一行代码的作用是使其构建后的固件信息能够输出到build目录下, 否则的话会输出到build/src下从而导致烧录的时候找不到固件.
其次我们还需要更换当前的芯片为RP2350
注意这里不要选择RISC-V的核心,否则编译不通过. 之后我们便可以编译这个项目(不需要在原本的程序中进行修改,内置了一个blinkled的demo烧录后可以直接看到效果)
编译成功, 我这里发现了ESP-IDF的插件也可以实现编译的功能,就是不知道底层执行的命令是否是一样的.
之后我们需要将开发板断电,然后按住boot键(这里需要吐槽一下不知道为什么树莓派官方不能额外增加一个复位的案件,除了micropython,别的模式烧录都非常麻烦需要断电). 然后点击pico插件的run project (USB) 这样的话固件就会被下载到开发板里.
此时固件就会被正确的下载到开发板里.而且LED灯也开始闪烁.
程序源码如下
注意,这里不建议直接使用我这里提供的代码,因为我删除了lib下的rtos库, 和删除了.git仓库历史文件. 建议使用上述指南进行代码的clone
- 2025-03-01
-
回复了主题帖:
【树莓派Pico 2 RP2350开发板】 测评 【二】记录一次失败的逻辑分析仪搭建过程
秦天qintian0303 发表于 2025-3-1 20:48
这是现成的demo做适配吗?
之前的逻辑分析仪固件就是这个大佬搞出来的。 现在不是2350出来了,他就移植了2350的,同时也编译好了。烧炉就能用 但是上位机好像有问题。
-
回复了主题帖:
二月二,龙抬头,金银财宝向家流
-
发表了主题帖:
【树莓派Pico 2 RP2350开发板】 测评 【二】记录一次失败的逻辑分析仪搭建过程
简介
相信大家大多数都使用过树莓派的逻辑分析仪固件, 现在RP2350出了之后我便迫不及待的尝试来将新的固件烧录进入从而实现逻辑分析仪的功能. 但是这里有非常大的坑. 我已经尝试过了三个电脑, 一个Win10, 一个Win11(全新), 一个M4芯片的mac mini.
固件的仓库地址为https://github.com/gusmanb/logicanalyzer/releases
用户可以在这个页面里找到对应的固件,并且进行下载, 下载之后按住开发板的boot键然后重新上电, 并且把固件拖拽到开发板中即可完成固件的更新. 但是主要的问题并不是出现在这个固件上,而是上位机上.
我们可以看到, 官方的版本支持是6.0之后才开始支持PICO2 , 所以上位机也应该安装官方release内的版本.如下所示
对于Win来说需要安装下图中Win的版本, 我目前写帖子的电脑是MAC OS 因此我用的是其他框选的版本.
Windows 的版本安装完毕之后在打开的时候会有很大概率的情况下报错. 报错的主要信息为, 显示通道的decorder找不到,无法启动(目前电脑上没有windows的截图), 如果你打开解压的目录. 找到对应的日志, 你会得到类似下图的报错信息.
作者的回复是最低使用Python的3.7版本.
然后把Python lib的路径,创建一个名为 python.cfg的文件并且写入. 如下所示. 为某位博主在youtube的教学视频内容.
按照上述的步骤操作后仍然不行. 然后我就看到某个discuss上说 Python3.13 中 Python.net 是无法正常工作的. 所以要降级到3.12. 我换了一台全新的window11 来进行的操作, 一共尝试了python 版本3.13, python版本3.12 分别尝试过应用商店里安装的python和python官网安装的python. 他们全都不works. 然后我便将平台换到了MAC os 上.
我大概尝试了这么多
尝试过控制台版本的上位机和GUI版本的上位机. 我的Zsh都禁止了这些程序的执行.(已经在安全里运行执行)
目前并没有什么好的解决办法. 不建议大家尝试.
虽然说能跑到400MHZ,但是上位机真的不知道该怎么才能安装上.
- 2025-02-28
-
发表了主题帖:
【树莓派Pico 2 RP2350开发板】 测评 【一】 开箱 + 编译uf2 固件 + blinkLed
本帖最后由 御坂10032号 于 2025-2-28 01:39 编辑
简介
经过了漫长时间的快递等待。终于拿到这块2035的开发板了, 看上去布局和RP2040一模一样。 都是采用了及其先进的micro usb接口。 经过了我的焊接之后。接下来来简单的开个箱 。
正面照
背面
和一代的PICO W 对比, 基本上外观没什么变化。
接下来我们来基于官方的MicorPython来构建一个自己的固件。 由于我这个之前编译过pico的, 所以本地的环境就不多做配置了。 所有的编译步骤都可以在micropython中找到。 我的环境是WSL乌班图环境。如下图所示。
首先进入到ports/rp2文件夹下。 在board下我们修改mpconfigboard.h来给这个开发板改个名称。
同时修改了Falsh大小为3MB, 然后修改下述文件flash大小为完整的flash大小即4MB
修改为3MB大小。
然后开始编译
make BOARD=RPI_PICO2 -j20
将生成的固件拖到树莓派pico2 中。
此时运行程序来检测flash情况。 发现已经变成了我们设置的3MB
脚本如下:
import os
def get_flash_usage():
# 获取Flash文件系统的总大小和已用大小
stat = os.statvfs('/')
block_size = stat[0] # 文件系统块大小
total_blocks = stat[2] # 总块数
free_blocks = stat[3] # 空闲块数
# 计算总空间和已用空间
total_space = (total_blocks * block_size) / 1024 # 转换为KB
used_space = ((total_blocks - free_blocks) * block_size) / 1024 # 转换为KB
free_space = (free_blocks * block_size) / 1024 # 转换为KB
return total_space, used_space, free_space
# 获取Flash使用情况
total, used, free = get_flash_usage()
# 打印结果
print("Flash存储使用情况:")
print(f"总空间: {total:.2f} KB")
print(f"已用空间: {used:.2f} KB")
print(f"剩余空间: {free:.2f} KB")
然后我们来点亮板载的LED。 根据原理图得知LED为GP25
简单的写一个Toggle LED的 demo
from machine import Pin
import utime
led = Pin(25, Pin.OUT)
while True:
led.value(0)
utime.sleep_ms(500)
led.value(1)
utime.sleep_ms(500)
补充截图(开发板名称已经改变)
固件信息(3MB Flash 1MB固件)
视频效果
[localvideo]e531b14cb4883a16ea51b8a9b4c002a2[/localvideo]
- 2025-02-26
-
回复了主题帖:
[经验] 【正点原子i.MX93开发板】测评 + 三、配置Wlan0+连接WIFI和SSH连接开发板
wangerxian 发表于 2025-2-26 13:35
那就只能上电的时候执行一下连接wifi脚本了。
是的
-
回复了主题帖:
[经验] 【正点原子i.MX93开发板】测评 + 三、配置Wlan0+连接WIFI和SSH连接开发板
wangerxian 发表于 2025-2-25 20:48
这个系统有GUI吗,可以用界面连接一下WIFI,看看重启后会不会自动连接WIFI。
没有屏幕, 只能用命令行连接。 重启的话初始化一下wifi 然后获取下 ip就行了很快
- 2025-02-25
-
回复了主题帖:
[经验] 【正点原子i.MX93开发板】测评 + 五、设备驱动开发 + 字符设备的挂载和卸载
Jacktang 发表于 2025-2-25 07:30
这么快都用上deepseek自动生成的配置文件了吗,感觉如何
这个配置文件一遍成功, 都不需要修改
-
回复了主题帖:
[经验] 【正点原子i.MX93开发板】测评 + 五、设备驱动开发 + 字符设备的挂载和卸载
涛耐迪 发表于 2025-2-25 09:38
Thank you, dear friend, for your selfless sharing and summarizing. I will study hard and make progre ...
Wow, interesting. Do you understand chinese ? As all content is written in chinese
- 2025-02-24
-
发表了主题帖:
[经验] 【正点原子i.MX93开发板】测评 + 五、设备驱动开发 + 字符设备的挂载和卸载
本帖最后由 御坂10032号 于 2025-2-24 23:51 编辑
简介
在上一个章节中我们使用了libgpio来控制GPIO,上一种方式是属于内核的控制,那么本章节和接下来的两个章节我将介绍如何在Linux中挂载一个字符设备。然后实现一个设备驱动从而来控制LED灯的闪烁等。 由于I.MX93的视频教程资料不是很多,因此本文的撰写是我通过学习正点原子I.MX6系列驱动开发教程的总结。 其IMX6系列的Linux版本是4.0+, 目前的I.MX93 Linux版本为6.0+, 操作上大同小异。
1- 首先创建一个项目文件夹, 然后创建c_cpp_properties.json文件用于查找并且包括头文件在vscode里。
需要指出,上面的这个文件并不是我手动编辑的,而是直接告诉了deepseek我的linux源码路径,deepseek帮我自动生成的配置文件。然后根据视频教程来编写一个Makefile用于编译我们的字符设备源文件。
KERNELDIR := /home/alientek/file/linux-6.1.55-v1.0
CURRENT_PATH := $(shell pwd)
obj-m := chrdevbase.o
build: kernel_modules
kernel_modules:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean
然后创建一个chrdevbase.c的文件, 按照字符设备驱动的编写规范来编写字符设备的file_operations 操作。如下所示
/*
* 字符设备 操作集合
*/
static struct file_operations chrdevbase_fops={
.owner = THIS_MODULE,
.open = chrdevbase_open,
.release = chrdevbase_release,
.read = chrdevbase_read,
.write = chrdevbase_write,
};
对应的结构内的四个方法如下所示,即代表字符设备的打开,关闭, 读取和写入。
static int chrdevbase_open(struct inode *inode, struct file *filp)
{
printk("chrdevbase_open\r\n");
return 0;
}
static int chrdevbase_release(struct inode *inode, struct file *filp)
{
printk("chrdevbase_release\r\n");
return 0;
}
static ssize_t chrdevbase_read(struct file *filp, __user char *buf, size_t count,
loff_t *ppos)
{
printk("chrdevbase_read\r\n");
return 0;
}
static ssize_t chrdevbase_write(struct file *filp, const char __user *buf,
size_t count, loff_t *ppos)
{
printk("chrdevbase_write\r\n");
return 0;
}
同时还需要定义一个字符设备的入口和退出点。
static int __init chrdevbase_init(void)
{
int ret = 0;
printk("chrdevbase_init\r\n");
/* 注册字符设备 */
ret = register_chrdev(CHRDEVBASE_MAJOR, CHRDEVBASE_NAME, &chrdevbase_fops);
if(ret < 0) {
printk("chrdevbase init failed!\r\n");
}
return 0;
}
static void __exit chrdevbase_exit(void)
{
printk("chrdevbase_exit\r\n");
/* 注销字符设备 */
unregister_chrdev(CHRDEVBASE_MAJOR, CHRDEVBASE_NAME);
}
/*
模块入口与出口
*/
module_init(chrdevbase_init); /* 入口 */
module_exit(chrdevbase_exit); /* 出口 */
以及对应的模块签名信息。
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Wang Chong");
需要注意的一点是这里的主设备的设备号一定要是一个不存在的设备号。可以在开发板中通过命令cat /proc/devices 查看,如下图所示
之后我们便可以编译这个字符设备的源码文件, 如下图所示。其中编译的.ko文件就是可以被开发板挂载的字符设备。
我们把这个ko文件拷贝的开发板里。
我们可以使用命令modprobe 【模块名称来挂载这个设备驱动】
但是它会提示这个模块在指定的目录not found, 按照I.MX6U的驱动开发文档中说明需要。使用命令depmod来更新模块依赖。但是它还是不行,经过我的一番资料查找, 6.0 + linux的这个设备加载的时候需要把这个ko文件拷贝到/lib/modules/6.1.55/kernel/drivers/ 目录下,这样再使用modprobe命令就可以挂载成功了。
此时字符设备已经加载成功了,我贴上一张截图来对比下内核打印的日志信息。
然后卸载字符设备。
完成的驱动代码和附件。
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/slab.h>
#include <linux/uaccess.h>
#include <linux/io.h>
#define CHRDEVBASE_MAJOR 200 //主设备号
#define CHRDEVBASE_NAME "chrdevbase" //名字
static int chrdevbase_open(struct inode *inode, struct file *filp)
{
printk("chrdevbase_open\r\n");
return 0;
}
static int chrdevbase_release(struct inode *inode, struct file *filp)
{
printk("chrdevbase_release\r\n");
return 0;
}
static ssize_t chrdevbase_read(struct file *filp, __user char *buf, size_t count,
loff_t *ppos)
{
printk("chrdevbase_read\r\n");
return 0;
}
static ssize_t chrdevbase_write(struct file *filp, const char __user *buf,
size_t count, loff_t *ppos)
{
printk("chrdevbase_write\r\n");
return 0;
}
/*
* 字符设备 操作集合
*/
static struct file_operations chrdevbase_fops={
.owner = THIS_MODULE,
.open = chrdevbase_open,
.release = chrdevbase_release,
.read = chrdevbase_read,
.write = chrdevbase_write,
};
static int __init chrdevbase_init(void)
{
int ret = 0;
printk("chrdevbase_init\r\n");
/* 注册字符设备 */
ret = register_chrdev(CHRDEVBASE_MAJOR, CHRDEVBASE_NAME, &chrdevbase_fops);
if(ret < 0) {
printk("chrdevbase init failed!\r\n");
}
return 0;
}
static void __exit chrdevbase_exit(void)
{
printk("chrdevbase_exit\r\n");
/* 注销字符设备 */
unregister_chrdev(CHRDEVBASE_MAJOR, CHRDEVBASE_NAME);
}
/*
模块入口与出口
*/
module_init(chrdevbase_init); /* 入口 */
module_exit(chrdevbase_exit); /* 出口 */
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Wang Chong");
驱动文件
- 2025-02-23
-
发表了主题帖:
[经验] 【正点原子i.MX93开发板】测评 + 四、编译设备树文件,加载设备树控制GPIO
本帖最后由 御坂10032号 于 2025-2-23 19:53 编辑
简介
本章节将介绍如何通过编译设备树来对GPIO口进行复用从而替换开发板内编译好的设备树文件实现GPIO设备树的重载来完成点灯操作。
设备树的编译需要基于正点原子Linux出厂源码来进行, 如果没有这个源码的话需要先将这个linux源码保存到虚拟机,然后进行解压。如下图所示。
上图的tmp目录是我按照教程对linux源码进行了一次编译生成的编译文件。(这里不着重介绍)。
接下来我们就需要访问默认linux源码中的设备树文件来查看板载的GPIO的分配情况。arch/arm64/boot/dts/freescale/imx93.dtsi
可以看到上面的设备树文件包含了很多内容, 不过我们关心的只有imx93.dtsi,它作为设备树的父类文件,一般不单独使用而是被其他的设备树文件包含。我们来使用cat命令查看它的内容信息, 同时找到GPIO相关部分。
这里的GPIO引用是别名的GPIO0引用到了实际的GPIO1,即后续操作都是用这个别名进行控制。接下来打开arch/arm64/boot/dts/freescale/imx93-11x11-atk.dts 来配置我们自己的GPIO信
息。 在根节点加上自定义的GPIO外设PIN
gpio: gpio {
compatible = "fsl,imx93-gpio", "fsl,imx7ulp-gpio";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_gpio2_29>;
status = "okay";
};
&iomuxc {
pinctrl_gpio2_29: gpio2_29grp {
fsl,pins = <
MX93_PAD_GPIO_IO29__GPIO2_IO29 0x31e
>;
};
};
接下来就需要编译设备树文件,编译这个设备树文件之后把编译的文件保存到开发板的指定位置。 首先让我们来编译设备树文件。通过使用下面的命令
source /opt/fsl-imx-xwayland/6.1-mickledore/environment-setup-armv8a-poky-linux
make imx_v8_defconfig
make dtbs
//设备树全编译
make freescale/imx93-11x11-atk.dtb
//如果只需要编译某一设备树可以参考这个
编译过程如下图所示
然后将这个设备树文件放到开发板的/run/media/mmcblk0p1 目录下,并且重启开发板。
然后使用gpioset -c gpiochip0 29=1 命令来控制GPIO的状态
效果如下所示
使用gpioset -c gpiochip0 29=0, 效果如下所示
总结
这种内核驱动的操作起来超级超级麻烦,而且上手难度巨大(对于没有接触过Linux开发的人而言)。尤其是编辑设备树的配置文件时候需要很多的前置知识,自己根据文档进行配置,配置完毕之后只能大概知道怎么回事,但是对于原理还是懵懵懂懂。 而现在B站上的正点原子的教程都是针对IMX6系列的教程,并没有IMX93系列的,用户学习IM93系列的教程只能通过正点原子的文档进行,但是文档中概念性内容较多,没有代码和详细的例程分析(虽然部分知识提供了文档,且在文档中有指明需要的前置文档在哪里,但是多文档打开的上下文切换很容易打断人的思考,且知识并不连贯)。对于驱动开发,虽然官方提供了源码,但是并没有文档对源码的解释说明。建议如果想学习Linux开发的话买他家的IMX6系列的开发板,不要购买这个最新的, 这个最新的IMX93系列的还是适合有Linux基础并且有实际工程应用经验的人使用。
-
回复了主题帖:
【正点原子i.MX93开发板】测评 + 二、环境搭建 + 开发板连接上位机
eew_Eu6WaC 发表于 2025-2-22 13:51
正点原子的这块板子对应的教程和资料丰富吗?
教程不行,教程完全等于你要自己去读文档, 文档里面还都是概念, 如果是没有接触过linux开发的话完全无从下手, 视频教程都不是基于这个开发板的, 虽然可能很多都是相通的,但是还是会让人无从下手
-
发表了主题帖:
[经验] 【正点原子i.MX93开发板】测评 + 三、配置Wlan0+连接WIFI和SSH连接开发板
本帖最后由 御坂10032号 于 2025-2-23 01:52 编辑
简介
在实际的使用过程中,配置开发板联网是一个非常重要的事情。虽然它可以使用串口的方式来访问Linux终端的shell。但是在文件的上传或者拷贝上shell就开始力不从心了。 在这一个章节中我将介绍如何配置和连接WIFI使其可以通过外置的小辣椒天线连接到路由器,从而获取到一个动态的IP地址(在DHCP租约内一直不会变化),然后通过ssh工具连接到开发板上,并且配置开发板的wifi为开机启动。
在开始这个文章之前,我把开发板烧录了出厂镜像。具体的烧录步骤在 01【正点原子】ATK-DLIMX93快速体验手册V1.0.pdf - > 2.4章节
这样的话所有的环境信息都变成默认的了, 我们继续wifi的连接工作。
1 - 配置wpa_supplicant.conf 位于 /ect/wpa_supplicant.conf
修改上述的ssid 和 psk 和 key_mgmt 为你路由器ap的配置信息。 注意,初始化的时候key_mgmt为none, 这个需要根据你AP的加密协议自己设置。
2- 重启wpa_supplicant服务
sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
这里可能会报错,如下所示
它会告诉你这个Wlan已经被blocked了, 所以我们需要解锁这个Wlan0(我也不清楚原因, 解锁后重启,仍然会被锁定)我们可以通过下述命令查看wifi的锁定状态
可以看到它目前处于锁定状态。运行下述命令来解锁这个Wlan0
rfkill unblock wlan
此时看到它已经解除了锁定。接下来我们需要重新运行命令sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
此时它会告诉你当前的服务已经被运行了,我们需要手动的删除之前的配置,或者停止掉它。
sudo killall wpa_supplicant
首先停止掉这个服务。然后删除wlan0的配置。
sudo rm -rf /var/run/wpa_supplicant/wlan0
然后再重新启动wap服务
此时看到已经没有报错的信息了。然后我们检查下wifi是否连接成功。
我们发现wifi已经正常连接上了,但是目前并没有ip地址。
我们需要使用udhcp来获取ip地址。
此时wifi正常连接成功。可以看到当前的ip地址是192.168.1.235.此时我们可以使用xshell工具通过ssh来连接到开发板。
问题
目前不清楚启动后为什么wap相关服务会启动失败导致不能自动连接wifi, 每一次都需要手动自己配置一下。
- 2025-02-22
-
回复了主题帖:
【正点原子i.MX93开发板】测评 + 二、环境搭建 + 开发板连接上位机
秦天qintian0303 发表于 2025-2-22 14:16
I.MX93现在在linux板子中属于哪个梯队的?
我对这个了解不多, 不过这个开发板性能是非常好的
-
回复了主题帖:
【正点原子i.MX93开发板】测评 + 二、环境搭建 + 开发板连接上位机
eew_Eu6WaC 发表于 2025-2-22 13:51
正点原子的这块板子对应的教程和资料丰富吗?
这块板子文档非常丰富,但是主要的问题是视频教程的所有内容都是文档上的一个演示。 现在我并不确定B站上正点原子里的linux教程(其他板子)和这个适配怎么样。我觉得应该是通用的
- 2025-02-20
-
发表了主题帖:
【正点原子i.MX93开发板】测评 + 二、环境搭建 + 开发板连接上位机
本帖最后由 御坂10032号 于 2025-2-21 23:22 编辑
简介
本章节将介绍I.MX93开发板的环境搭建步骤。 官方提供的资料比较多,分别是手动安装乌班图,然后自行搭建开发环境。第二种简单的方式就是使用资料盘中的B盘, 直接使用VM虚拟机导入B盘的镜像文件即可。
如下图所示为百度云文件下载到本地后的file list。 其中包括了各个软件包。
它还自带了一个乌班图的镜像,如果手动安装的话可以直接安装这个Vmware然后安装乌班图的镜像。 按照09、文档教程 - > 01【正点原子】ATK-DLIMX93 Ubuntu搭建&Linux基础学习手册V1.0 手册的第一章节进行安装即可。
需要注意的一点是, 这边的环境并没有搭建好, 只不过是安装了乌班图的操作系统,而真正想要使用交叉编译还需要额外的安装。这里推荐直接使用正点原子提供好的虚拟机B盘。
虚拟机大小超过了50GB,因此建议用户可以寻找一个容量充足的分区进行解压。之后便可以按照文档教程中的步骤来将虚拟机导入到VMware中。
导入成功,并且启动完成。 之后我们来配置一下网卡的配置, 使其可以和宿主机正常通讯。
目前的情况是没有IP地址, 所以我们需要配置虚拟机网络。 通过检查后发现, 目前的虚拟机已经配置了桥接模式
但是目前的桥接模式并没有选择目标网卡, 所以需要在虚拟网络编辑器中配置当前桥接模式目标网卡, 注意这个地方每个人的网卡不一样,即选择自己连接互联网的网卡即可
再次使用ip addr 命令查看,并且ping,发现已经获取到了ip地址,并且已经可以访问互联网。
至此环境搭建完毕
开发板连接上位机
根据正点原子02【正点原子】ATK-DLIMX93嵌入式Linux开发环境搭建手册V1.0 我们可以来确定系统boot时的模式,官方的教程都是基于A核的因此因此我们需要将拨码开关都拨动到0上,从而使其开发板从A核启动。
然后使用USB-typec线把开发板连接到电脑。
然后使用串口助手查看启动的日志
可以查看到上述已经正常启动成功了, 由于这个开发板是别的大佬测评退回的,所以目前我并不清楚当前的系统版本是否和出厂的版本不一样。 简单的使用了free 命令和 df命令查看了ram和 disk的占用。 这两天需要研究一下如何来把出厂的系统编译烧录一下,来恢复默认的设置。
正点原子提供了一个出场的shell用来测试音频的播放。 我们来简单的进行一下音频测试,之后便进入到我们的主题,驱动开发上。
选择播音测试
视频效果:
[localvideo]e3fad004015007ad81cb1675a48b5da7[/localvideo]
-
发表了主题帖:
【正点原子i.MX93开发板】测评 + 一、开发板开箱
本帖最后由 御坂10032号 于 2025-2-20 20:47 编辑
简介
大家好,今天给大家开箱一块来自正点原子I.MX92的Linux开发板, 这块开发板是参加论坛年终回炉活动获得的。在这里非常感谢论坛的大力活动赞助。当时申请这块开发板的原因是因为这块开发板具有大量的例程和教程视频。 因此希望借此机会学习一下linux的开发。 同时由于之前这块板子论坛里已经有过测评活动了, 因此其他坛友的经验也可以帮助我学习到很多。 因此才有了本次的测评和学习等。这块开发板官方提供的资料有Linux驱动、C应用和异核通信以及AI开发等。 这次的测评和学习的重点我想放在linux驱动上。 接下来我来给大家介绍一下这块开发板的简要参数。
这里附上一张淘宝上的详细参数。可以看到板子的资源是非常不错。这次希望可以学习到如何在linux上来控制各个外设。 然后从而把我手头上的那个树莓派zero2 w也用起来。
箱子照片
开发板的来源是之前往期测评活动退回的板卡, 是某个坛友之前退回的, 我这里把坛友的信息打了个码。
开发板正面照
附件是带了一个小辣椒wifi的天线和一个12v的电源适配器, 以及一根type-c线。
开发板上电,后连接串口发现程序日志正常输出, 开发板简单测试完成。由于目前不知道这个开发板内的例程是什么,所以我在接了一个LVDS屏之后没有输出(屏幕不是自带的),屏幕的点亮可能要往后稍微放一下。
串口工具的日志打印信息
接下来的进度就是根据B站上的视频进行学习,然后把资料盘的数据都下载一下搭建开发环境。
目前开来这个视频教程的资料不是很丰富,具体的步骤要详细的去阅读文档了。 然后根据文档的资料进行学习