(备忘备忘!!!)
想用Arduino UNO设计一个系统参数显示器,遂打算通过Arduino IDE进行编程,无奈在网上查找了许多的资料和安装方法都失败了(可能是系统版本不同的原因?或者我使用的开发板与其版本不同?),最后通过查阅Arduino官方手册和CH341驱动的技术文档(加上不断尝试^_^),找到了解决方法。以下是安装编译器和调试的具体步骤,留作备忘,仅供参考。
本文所讨论的Arduino UNO开发板并非Arduino官方发行的官方板,而是经过官方认证的复刻板,如果你使用的是官方板,此方法可能对你并不适用。
阅读前注意事项:
1、确保你使用的是Liunx系统Ubuntu发行版,版本号为22.04;
2、确保你能正常访问Arduino官网(或能正常打开软件商店(UB software);
3、确保你的Arduino UNO开发板正常工作。
同时:
1、我使用的Ubuntu系统版号为22.04.1LTS,如果你安装失败,可能与此有关;
2、我使用的Arduino UNO为R3版,如果你调试失败,可能于此有关;
3、我使用的开发板USB串口芯片(或者应该叫串口转USB芯片?还是?)使用的驱动版本为CH341,如果你安装失败,可能与此有关。
(本文目前仅作为备忘使用,所以文中涉及的指令或方法我不会作解释,如果某一部分你不理解,或者不确定进行这个步骤会不会损坏你的计算机,可通过文末的邮箱与我取得联系。你也可以先收藏这篇文章,日后我会对文章进行补充和完善。)
目录
5、insmod: ERROR: could not insert module xxx.ko: Operation not permitted
一、安装Arduino IDE
安装Arduino IDE有两种方法,分别是通过官网下载安装和通过软件商店(UB Software)搜索安装。得益于Ubuntu的可视化界面,可以很轻松的安装软件。
1、通过官网安装
首先通过浏览器进入Arduino软件支持页,下载与你的操作系统适配的Arduino IDE版本(22.04版本推荐使用1.8.19),下载完成后会得到以下文件:
双击打开该文件,选择命名为“arduino-1.8.19”的文件夹(如下图),将其解压到合适位置。
进入Terminal,输入以下指令并执行:
cd [FILENAME] #FILENAME为你解压文件的地址(注意要带上文件名称)
#例如:cd arduino-1.8.19/
./install.sh #如果提示权限不足或无法安装,尝试提升权限(使用下方指令)
#sudo ./install.sh
最后搜索“Arduino IDE”,如果显示如下图标,则安装成功。
使用Arudino官方提供的安装包可在一定程度上避免程序版本落后或内容阉割等问题,但受制于某些原因(你懂得),多数时候并不能很流畅的使用此方法进行安装。于是,下面介绍第二种方法。
2、通过软件商店(UB Software)安装
首先打开“Ubuntu software”,搜索“Arduino”,会显示两个相关软件(下面那个可能是我安装后显示的本地软件?我不清楚。如果你的搜索结果显示的也是两个,推荐安装“arduino”):
单击对应软件并安装。最后和第一种方法一样,在软件列表中搜索“Arduino IDE”,如果安装成功,会显示软件图标。
但需要注意的是,使用此方法安装的Arduino IDE可能是被阉割的不完全版,或者不是最新版,因此建议使用第一种方法进行安装。另外,据我的一些同事/朋友说,使用非官方安装包安装该软件会无法运行(我没有使用这个方法安装过,所以有待查实)。
二、连接Arduino UNO R3并打开通信端口
以下内容不适用Arduino UNO官方板(至少我在使用官方板时没有遇到,如果你的官方板不能正常使用,可以继续阅读,说不定能解决你的问题。)
安装Arduino IDE后打开,会显示以下界面。从界面中可知当前开发板未连接主机(或称计算机)且通信端口未打开。
进入Terminal,查询系统对USB串口的支持:
lsmod | grep usbserial
#如果查询到usbserial,则代表系统支持该串口,如果查询不到,则需要安装相应驱动
#对于本文所述的开发板,要求系统应对CH340或CH341提供支持
如果查询项中没有显示CH340、CH341和CH34x等字符(可以通俗的理解为系统没有解析这些串口的驱动),此时应安装相应驱动,在本文中,我们选用CH341驱动进行安装(CH340与此大同小异)。
首先,下载CH341驱动文件(访问码:z2x2),下载后得到以下文件。
双击打开该文件,将命名为“CH341SER-master”的文件夹解压到合适位置。
进入Terminal,输入以下指令并执行:
uname -r
#得到当前Ubuntu发行版号(或者叫详细版号?)
#例如 5.15.0-47-generic
cd /lib/modules/5.15.0-47-generic/kernel/drivers/usb/serial/
sudo rm -rf ch341.ko
cd
cd [FILEPATH] #FILEPATH为你解压文件的路径
#例如 cd CH341SER-master/
make
sudo make load
#modprobe usbserial
#insmod ch34x.ko
此时CH341驱动已成功安装至计算机。使用以上方法一般不会出现问题,如果你在安装过程中出现了诸如
error: implicit declaration of function ‘signal_pending’; did you mean ‘timer_pending’? [-Werror=implicit-function-declaration]
error: unknown type name ‘wait_queue_t’; did you mean ‘wait_event’?
等错误,则应卸载并删除已下载的驱动文件,并重新下载驱动安装文件(访问码:z2x2),或对源程序进行修复:
cd [FILEPATH] #懂得都懂
gedit ./ch34x.c
#如果地址输入正确,此时你应该会打开一个名为“ch34x.c”的文件
如果提示:
error: implicit declaration of function ‘signal_pending’; did you mean ‘timer_pending’? [-Werror=implicit-function-declaration]
则:在文件中增添头文件“#include <linux/sched/signal.h>”
如果提示:
error: unknown type name ‘wait_queue_t’; did you mean ‘wait_event’?
则:将文件中“wait_queue_t wait;”替换为“wait_queue_entry_t wait;”(该行语句所在位置会在提示中指出,请注意观察)
以上指出的两个错误是列示在官方文档中的(我在安装的过程中并未遇到错误),如果你在安装过程中遇到了其他错误,可通过文末邮箱与我取得联系,我会尽最大努力帮你解决。
修正所有内容后保存并关闭文件,然后执行:
make
sudo make load
#modprobe usbserial
#insmod ch34x.ko
cd
# 安装结束后,输入以下指令查看驱动是否正常运行
#这一步似乎需要重新启动系统?我不确定,最好重新启动一下,以防不能读取
lsmod | grep usbserial
#若:usbserial xxxxx 1 ch34x
#则安装完成且运行正常
此时将开发板接入计算机并运行“Arduino IDE”,选择端口(串口?"Port"不知道你一般怎么翻译)为“/dev/ttyUSB0”(如下图)。
具体方法:Menu ==> Tools ==> Port ==> /dev/ttyUSB0
连接端口后,就可以进行程序编译了。如果进入软件后不能选择端口(即此项为不可选中),请继续阅读下文。
三、操作/安装过程中可能遇到的一些问题及解决方法
在操作/安装过程中或多或少都会遇到一些问题,例如安装驱动后无法使用、重启计算机后驱动消失或Arudino IDE无法启动等,我在这一小节列出了一些我在安装过程中遇到的问题,如果你遇到了与我相同或相似的问题,这些内容可能会对你有所帮助,如果你遇到了本小节没有收录的问题,你可以发邮件给我(地址在文末)或在文章下方写评论,我会尽力帮你解决。
建议发行复刻板的厂商不要为了节约成本随意更改USB串口芯片(如果这个名称是错误的,欢迎你告诉我正确的名称,我不想去检索它的名称 *_* ),当然我承认CH341真的是一款完美的驱动,但是...相较于官方板调试步骤真的很复杂。
1、安装驱动后无法使用
这个问题主要体现在已确认CH341驱动完全安装,但打开Arduino IDE后不能选择端口(即前文提到的那个“端口”),具体解决方法如下:
sudo apt-get remove brltty
#sudo apt remove brltty
sudo apt-get purged brltty
#sudo apt purged brltty
2、重启计算机后驱动消失
解决方法:
cd CH341SER-master/
sudo cp -v ch34x.ko /lib/modules/5.15.0-47-generic/kernel/drivers/usb/serial/
sudo depmod -a
3、找不到ttyUSB0
这个问题我查阅了一些资料,目前得出的结论是由于权限不足无法调用(说实话我没有搞懂这个错误发生的根本原因是什么),以下是我目前使用的解决方法:
sudo usermod -aG dialout [USERNAME]
4、Arduino IDE无法启动
解决方法:
4.1、通过“安装Arduino IDE”小节中“通过官网安装”方法重新安装;
4.2、多点击几次软件图标(可能有奇效)。
5、insmod: ERROR: could not insert module xxx.ko: Operation not permitted
解决方法:于BIOS中关闭“安全启动选项”(由于不同厂商的主板进入BIOS和修改BIOS的方法不同,具体怎么关闭请询问你的主板生产厂商)。
结语
以上介绍了安装Arduino IDE的方法和调试Arduino UNO的方法(或者叫设置 *_* ),文章主要以Arduino官方文档为参考,介绍的安装/调试方法等尽可能的贴合官方,使用本文作为参考不会引发系统重大错误或损坏开发板(废话),推荐将这篇文章作为你在Ubuntu系统中安装Arduino开发板的参考(或叫说明书),毕竟我认为你不愿意、也没有时间阅读Arduino官方提供的使用手册和CH341驱动文件安装说明。但是,由于在撰写本文时...,所以文章并不是很完善,其中还有很多不足之处;同时,由于(目前)撰写文章的目的是为了备忘,所以没有提供说明和解释(以后会补上的),因此在阅读过程中,你可能会对一个或多个部分使用的指令抱有疑问,欢迎通过文末邮箱与我取得联系。本文在日后会继续完善,如果你使用文章提供的方法不能成功的安装和调试开发板,或者,你遇到的问题在文中没有提及,你可以先收藏文章,等更新后再进行查看(说不定更新内容能够解决你的问题)。
注1:“得益于”Ubuntu搭载的IBus框架中文输入法,文中可能会出现一些错别字(尽管我已经进行了检查),如果因为错别字使得你不能理解文意,可与我取得联系,我会为你解惑;
注2:同上,文中可能会出现“Arudino、Adruino、Adiuno和Adinuro”等字符,请自动将其替换为“Arduino”;
注3:我目前处于开发初期(也就是正在学习Arduino开发),所以一些专业词汇把握的不是很准确,如果在阅读期间你发现了一些描述不当的语句,请与我联系,我会对其进行修改。
参考文献(文章)
1、Arduino IDE 1 Installation (Linux) | Arduino Documentation | Arduino Documentation
2、GitHub - arduino/Arduino: Arduino IDE 1.x
3、How to install Arduino IDE on Ubuntu 20.04 Focal Fossa
4、CH341SER/README.md at master · juliagoda/CH341SER · GitHub
联系方式
通过留言或发送邮件至killmiledc@outlook.com。