树莓派避坑指南:CM4系统安装后必做的7项关键设置(含USB功能修复/屏幕适配/VNC启用)

树莓派CM4安装系统 本次记录使用树莓派CM4安装系统,因项目需要将之前使用的树莓派4B换成尺寸更小的cm4,因此需要将树莓派4B上的系统以及安装的环境转移到CM4上,因此最开始的想法是直接将之前系统读取成img镜像,然后烧录到带emmc的CM4上,但是进行的步骤并不是这个,进行的是下面内容,在此记录,为以后避坑。 阅读详情

树莓派CM4开箱即用手册:从点亮到精调的七步深度配置

刚拿到一块树莓派Compute Module 4(CM4),那种感觉就像收到一个功能强大但尚未组装的乐高科技套装。兴奋之余,你可能已经刷好了系统镜像,插上电源,期待着它立刻运转起来。但现实往往给你泼一盆冷水——USB接口没反应,屏幕要么一片漆黑要么显示不全,想远程连接却怎么也连不上。别慌,这几乎是每个CM4新手都会经历的“标准流程”。CM4作为树莓派家族中更偏向工业嵌入式的成员,其默认配置与常见的树莓派4B有很大不同,许多功能出于兼容性和功耗考虑,出厂时是关闭或需要特定驱动的。这篇文章,就是为你准备的“避坑地图”。我们不谈那些泛泛而谈的基础安装,而是直击痛点,聚焦于系统首次启动后,你必须立即动手调整的七个核心设置。这些设置环环相扣,一个没做好,后续的开发和应用就可能举步维艰。我会带你像老手一样,深入config.txt的底层参数,调整显示输出的每一个像素,并建立起稳定可靠的远程工作环境。

1. 唤醒沉睡的USB:从OTG到主机模式的切换

CM4模块本身没有物理USB接口,它的USB功能完全依赖于底板(Carrier Board)。许多流行的底板,包括微雪(Waveshare)的型号,默认将CM4的USB控制器配置为设备模式(OTG模式)。这意味着,你的USB-A口可能无法识别U盘、键盘或鼠标,因为它正等着被另一台电脑识别为一个USB设备。我们的首要任务,就是将它切换回我们熟悉的主机模式。

这个切换的核心在于修改引导配置文件/boot/config.txt。这个文件在树莓派启动的早期阶段被读取,决定了硬件的基本初始化方式。

sudo nano /boot/config.txt

你需要找到并修改或添加以下几行关键配置:

# 启用USB主机控制器驱动,并强制指定为host(主机)模式
dtoverlay=dwc2,dr_mode=host

# 至关重要:确保OTG模式被禁用或注释掉
# 如果存在类似 `otg_mode=1` 的行,请在其前面加上 `#` 注释掉
# otg_mode=1

这里有几个细节需要注意:

  • dtoverlay=dwc2,dr_mode=host:dwc2是树莓派博通芯片上USB控制器的驱动。dr_mode参数可以设置为 host(主机)、peripheral(设备)或 otg(自动切换)。对于绝大多数作为独立电脑使用的场景,host是唯一正确的选择。
  • otg_mode=1:这个参数如果被启用(值为1),会强制USB控制器工作在OTG角色切换模式,这常常与dwc2驱动的主机模式冲突,导致USB口彻底失效。最稳妥的做法是直接注释掉它。

注意:修改config.txt后,必须完全重启树莓派才能生效。简单的sudo reboot有时可能因为内核模块加载顺序问题导致更改不生效,如果重启后USB仍然无效,尝试完全断电再上电。

修改完成后,重启并插入一个U盘,使用lsusb命令检查。你应该能看到类似下面的输出,其中包含你的U盘信息,这标志着USB主机功能已成功激活。

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
树莓派CM4驱动5寸DSI触摸屏实战:从配置到与GD32VF103协同开发 MIPI DSI(Display Serial Interface)是一种专为显示屏设计的高速串行接口标准,以其高带宽、低延迟和抗干扰能力,广泛应用于移动设备和嵌入式系统。其工作原理是通过差分信号传输像素数据和指令,相比传统的SPI或并行RGB接口,能更高效地驱动高分辨率显示屏,并显著降低主控的资源占用。这项技术的核心价值在于为嵌入式设备提供了稳定、流畅的显示解决方案,是实现复杂人机交互界面的基础。在物联网、工业控制和便携式设备等应用场景中,稳定可靠的显示与触摸交互至关重要。本文以树莓派计算模块CM4和DF 阅读详情

相关推荐

树莓派CM4 装系统和换源

一、系统下载 官网:Operating system images – Raspberry Pi 最新的版本删除了默认账号pi。考虑以前的使用习惯,此处下载以前的buster debian版本。CM4是arm64架构,根据板子的配置容量不同可选相应的版本,我这里选择lite版本。 Index of /raspios_lite_arm64/images/raspios_lite_arm64-2021-05-28 二、写入系统 写入系统比较简单,可以根据网上的资料进行烧写。主要包括两步: 使用.

健忘16的博客 2204

【树莓派4B】设置USB介质启动

很多场景如nas都对树莓派的存储空间提出了一定要求,刚好家里闲置了一块机械硬盘,正常可以通过一些配置挂载到树莓派上。但是,考虑到sd卡的性能、寿命瓶颈,想可不可以直接像电脑一样系统装在硬盘中,从硬盘启动?看下图,瞩目的容量1.8T告诉了我们答案(斜眼笑)。

qq_23096319的博客 8584

uboot usb设备驱动

介绍usb device设备驱动 uboot在init_dm中会扫描dtb和代码中driver进行匹配,匹配成功就调用driver驱动进行bind 以dwc3为例进行介绍 DTS中定义 usb0: usb0@ff9d0000 { #address-cells = <2>; #size-cells = <2>; status = "disabled"; compatible = "xlnx,zynqmp-dwc3"; //匹配的compatible reg = <0x

osnet的博客 4476

华为MA5626 ONU开局配置实战:从零到业务就绪的完整命令手册

本文详细介绍了华为MA5626 ONU设备的开局配置全流程,包括物理连接、命令行初始化、业务VLAN划分、PoE功能配置及故障排查。通过实战命令手册,帮助网络工程师快速完成从设备上电到业务就绪的完整配置,特别适合FTTB场景部署。

weixin_26934905的博客 561

避坑指南:LVGL在Arduino环境编译报错?3步搞定lv_conf.h路径问题(附ST7789屏幕调试技巧)

本文详细解析了在Arduino环境中配置LVGL图形库时,如何解决常见的“lv_conf.h file not found”编译报错问题。通过三步法:定位并复制模板文件、启用核心配置并指定路径、配置基础参数,从根本上解决路径问题。文章还结合ST7789屏幕驱动,分享了使用TFT_eSPI库进行显示适配、内存优化及背光控制等实战调试技巧,帮助开发者建立清晰、可维护的嵌入式UI工程基础。

lake5的博客 860

关于深度可分离卷积

关于深度学习中的深度可分离卷积

qq_45670407的博客 1796

地平线天工开物AI开发平台实战:从量化训练到模型部署的完整指南

本文提供了地平线天工开物(OpenExplorer)AI开发平台的实战指南,详细解析了从量化训练到模型部署的完整流程。文章重点对比了量化感知训练(QAT)与训练后量化(PTQ)两条核心路径的优劣与适用场景,并分享了图像分类模型PTQ部署的实战经验与常见问题调试技巧,旨在帮助开发者高效地将AI模型部署到地平线AI芯片上。

weixin_29046035的博客 457

GPOPSII 对控制量变化率进行约束,避免控制量振荡

在这篇文章中,在GPOPSII中通过对控制量变化的约束,优化求解得到更平滑的控制量曲线,更符合真实控制约束。

Dannyfomer的博客 1871

antv x6 沿边图标循环动画实现

2.使用transition给边设置动画,利用complte方法实现循环动画。实现效果,如下图,边上存在两个图标,要求图标延边一直循环动画。1.注册一个自定义边,边上定义两个图标,并设置其初始位置。

lingliu0824的博客 3366

从理论到实践:全面解析Cmk(设备能力指数)的应用与优化

本文全面解析了设备能力指数Cmk的核心概念、计算逻辑与关键应用场景。Cmk作为衡量设备本身固有加工能力的黄金标准,在设备验收、大修后验证及过程能力根因分析中至关重要。文章通过实战案例,详细阐述了执行Cmk测试的“五大固定”黄金法则、数据计算分析方法,并提供了Cmk不达标时的系统性排查与优化策略,帮助制造企业实现预防性质量管理。

jump7的博客 530

查找【优快云】- 人工客服

【代码】查找【优快云】- 人工客服。

👨‍💻 前端开发者 | 技术分享者 1410

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 深入解析内存BANK与RANK:从逻辑到物理的数据寻址机制
下一篇: 【技术解析】薄膜干涉与镭射材质的MatCap渲染实战
生活碎片
博客等级 码龄2年 51粉丝 1780原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值