David的贡献,我花了很多功夫研究的,谢谢~
Raspberry Pi、Beaglebone Black、Arduino并称为三大开源硬件。 笔者对这三个平台进行了比较,感觉Raspberry Pi是最适合单片机工程师学习Linux的SBC。 一旦熟悉了 Raspberry Pi,就很容易集成到其余两个平台中。 另外,大家应该都知道,Raspberry Pi 是目前全球第三大计算机平台(另外两个 Windows-PC 和 MacOS-PC 就不用我介绍了)。 Raspberry Pi 硬件现在可以定制并可用于产品开发! 它不仅仅是一个创客玩具!
CPU内核:BCM2708/BCM2709/BCM2710 CPU封装:BCM2835/BCM2836/BCM2837
当今的Linux计算机系统从硬件到软件都非常复杂,涵盖了电路设计、底层内核及驱动程序设计、应用软件设计以及系统运维。 我们的精力有限,不可能每一个都掌握。 像我一样,当我开始从事单片机职业时,我选择专注于Linux应用软件设计(抱怨:我认为制作内核和驱动程序是一个纯粹的技术工作,无聊,不够业务。而且,制作单片机已经经历了硬件、驱动、RTOS,所以我特别尊重那些纯粹做技术工作的NB人,毕竟社会太浮躁了。
我扯得太远了,怪不得老婆说我啰嗦,咱们言归正传吧!
首先,我需要一块树莓派板。 我使用的是Model B+和Arm11的旧内核,但它们都是一样的。 Linux 是关于软件的。
请准备以下内容:
1:FT232 USB转串口模块
2:RT2870/RT3070无线适配器USB无线网卡,兼容卡也可以
3:8G class10 SD卡+USB读卡器
4:5V、2A电源
5:RJ45网线+USB有线网卡
6:USB转TTL串口线,用于终端命令行,我的PL2303芯片(投诉,FTDI芯片更好)
7:我别无选择,只能使用另一个USB集线器。 如今的笔记本电脑 USB 端口非常珍贵。
好的,连接所有东西,连接,再次连接,最后:
镜像下载:
我用的是最新的操作系统RASPBIAN STRETCH LITE,是Debian9操作系统,BB Black也是Debian
使用Win32DiskImager工具软件刻录一张空的SD卡。 烧录完成后,插入卡,上电启动。
注意此时USB无线网卡和USB串口已经被系统识别了!
开始系统配置!
1:启用root权限,登录pi账户,在命令行输入以下内容:
sudo 密码 root
sudo passwd –解锁root
苏根
跳转到root账户命令行
2:为root账户添加SSH登录权限。 出于安全考虑,操作系统默认禁止root登录。
使用 nano 编辑 /etc/ssh/sshd_config
将 PermitRootLogin 行更改为“PermitRootLogin yes”
3:配置各网卡
我的笔记本USB有线网卡IP:192.168.1.71,直接连接树莓派ETH0网卡
我的Raspberry ETH0网卡IP:192.168.1.11(ETH0有时会被识别为另一个名称,我无法弄清楚这个名称命名机制。谁知道为什么是enxb827eb957644?打电话给我!)
我的树莓派USB无线网卡使用DHCP连接手机的wifi热点(点评:国外公司的Web不太好用,所以就用自己的流量)
我需要我的Raspberry有两个可以使用的网卡,但是无论我如何配置,我发现存在使用冲突(一个静态IP,一个动态IP)。 网上一堆配置教程都不管用,反而让我苦不堪言。 ,所以我决定自己做:
ETH0(enxb827eb957644)配置:修改/etc/rc.local,添加一行启动脚本
#!/bin/bash x=$( ifconfig -a | grep -c "eth0" ) if [ $x -eq 1 ];then ifconfig eth0 192.168.1.11 up else ifconfig enxb827eb957644 192.168.1.11 up fi touch power_on_time.log echo "Your PI is powered up at: " > power_on_time.log date >> power_on_time.log echo "Init..."
USB无线网卡设置:
直接修改wpa_supplicant.conf:
root@raspberrypi:/etc# cd wpa_supplicant
country=GB ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="david-wifi" psk="12345678" }
或者修改interfaces文件并追加wpa.conf
接口内容:
auto wlan0 iface wlan0 inet dhcp wpa-conf /etc/wpa.conf # iface default inet dhcp
wpa.conf内容:
network={ ssid="david-wifi" key_mgmt=WPA-PSK psk="12345678" }
显示日志:
root@raspberrypi:~# ifconfig -a enxb827eb957644: flags=4163 mtu 1500 inet 192.168.1.11 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::9de1:de0c:cb1d:462b prefixlen 64 scopeid 0x20 ether b8:27:eb:95:76:44 txqueuelen 1000 (Ethernet) RX packets 2361 bytes 206594 (201.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1140 bytes 180441 (176.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 wlan0: flags=4163 mtu 1500 inet 192.168.43.236 netmask 255.255.255.0 broadcast 192.168.43.255 inet6 fe80::eb41:da24:d28:8575 prefixlen 64 scopeid 0x20 ether f4:28:53:0e:6a:25 txqueuelen 1000 (Ethernet) RX packets 69 bytes 6756 (6.5 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 101 bytes 11817 (11.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 root@raspberrypi:~# ping 192.168.1.11 PING 192.168.1.11 (192.168.1.11) 56(84) bytes of data. 64 bytes from 192.168.1.11: icmp_seq=1 ttl=64 time=0.210 ms 64 bytes from 192.168.1.11: icmp_seq=2 ttl=64 time=0.226 ms --- 192.168.1.11 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.210/0.218/0.226/0.008 ms ^Croot@raspberrypi:~# ping www.baidu.com PING www.a.shifen.com (180.97.33.107) 56(84) bytes of data. 64 bytes from 180.97.33.107 (180.97.33.107): icmp_seq=1 ttl=50 time=45.1 ms 64 bytes from 180.97.33.107 (180.97.33.107): icmp_seq=2 ttl=50 time=47.0 ms 64 bytes from 180.97.33.107 (180.97.33.107): icmp_seq=3 ttl=50 time=39.5 ms ^C --- www.a.shifen.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 39.559/43.928/47.057/3.184 ms root@raspberrypi:~#
重启树莓派让一切生效!
树莓派配置更新!
1:必须会使用raspi-config命令,首先设置扩展SD卡容量
检查内存,检查存储,最后重新分配一个tmp文件夹来存放调试用的临时程序文件。 无需写入FLASH。
2:更新操作系统内容
sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade
如果您喜欢 Vim,请设置 Vim
sudo apt-get install vim
编辑 /etc/vim/vimrc 文件,在最后添加以下内容
1: set nu #显示行号
2:#Syntax 语法高亮
3: set tabstop=4 #Tab回四个空格
安装调试器:
sudo apt-get install gdbserver # 很重要!!! sudo apt-get install picocom
如果您还有以上疑问,请了解:
1.
2、【开发指南】M6G2C&A6G2C系列核心板软件开发指南_V1.05.pdf。
3.搜索引擎搜索。
一点口水概念:
1:Linux中的Platform_driver是内存设备驱动。 驱动程序直接访问SOC内部寄存器。 platform_device是位于芯片内部的所有片上外设。 其他驱动程序用于 SOC 外部设备访问。
2:Linux中的设备树配置主要起到初始化板载硬件资源的作用,比如初始化GPIO寄存器、UART寄存器等,这些寄存器的值是指定的。 dts源文件还包含引脚分配和配置引脚等信息。 函数,启动对应的驱动
3:Linux开发需要工具链、编写makefile和GDB(客户端调试器/服务器)调试器。 这些资源你需要自己去找,自己匹配版本,自己编译测试,比较复杂(当然可以找供应商全部解决),都是钱的事。 有钱了就可以当叔叔了。 如果你没钱,就跟我一起玩,我不花一分钱都可以搞定。)
我真的说了很多废话! 赶快使用Linux-App-IDE吧。 一定要像Keil-MDK一样方便易用,无需编写Makefile。
吐槽:我知道有人喜欢使用VIM、GDB/CGDB、NFS在终端远程连接目标机GDBserver来调试程序。 我知道有些人喜欢使用Ubuntu和DDD来调试程序。 我也知道Raspberry可以使用本地GCC/GDB,但考虑到编辑的易用性、编译速度和流行度,我仍然坚持Windows交叉编译和调试。 或者也许我错过了什么,请告诉我关于这只井里的青蛙的事情!
提示:功能强大的终端软件MobaXterm家庭版看起来非常好用,树莓派无需屏幕即可使用。
为了找到一个免费的、不断更新的、官方支持的、简单易用的Linux应用开发IDE,我搜索了N个术语并尝试了:
Visual Studio + winGDB:要花钱,VS太大了
Visual Studio + VisualGDB:要花钱,VS太大了
Eclipse + 插件:插件设置TTMD很麻烦
Sourcery-CodeBench-Lite-Edition:免费,但官方支持较差。 我不敢乱用Raspberry,因为我认为这是一个陷阱。 有精力的同学可以尝试一下。 如果可以的话请告诉我你的感受如何?
Arm-DS-5社区版:官方免费IDE,Eclipse的定制版本,设置更容易。
使用ARM最新工具DS-5为Linux开发一个简单的Hello World应用程序,开胃菜,大家好!
DS-5 社区版/版本:5.27.0/内部版本号:5270014 我决定使用这个!
首先解决工具链问题,尝试了几个,包括Linaro。 没有找到一个工具链明确告诉你如何在交叉编译系统之间同步库文件的更新,我立刻就糊涂了! 这些库不同步,后面写程序也不是问题,于是我不断在浩瀚的互联网上搜索,坚信Raspberry强大的生态链。 终于有一天,SYSPROGS 救了我。
完美,一切都是那么完美! 请注意,您必须更新 Raspberry PI 跨工具链的 Sysroot
SYSPROGS官方完美支持Raspberry 1/2/3,SmarTTY终端软件也非常好用。
跟上伟哥的脚步 GO GO GO!
1:默认安装raspberry-gcc4.9.2-r4.exe,我的系统是Win10。
2:默认安装ds5-ce-windows64-27rel0.zip(setup.exe)。
3:打开 DS-5 并选择工作空间。 我的是(C: Users cn28060369 Documents DS-5 Workspace)。
4:将 C:IT_CodeRepoDS-5examplesLinux_examples 中的 hello_linux 文件夹复制到 DS-5 工作区。
5:File->将已有的Workspace项目文件夹hello_linux导入到IDE中。
6:设置工具链,选择已安装的Raspberry专用工具链,然后点击下一步。 DS-5会自动检测工具链并按照提示完成。 我图中的那个已经设置好了。
7:右键单击项目文件夹,选择属性,设置工具链参数。
这里启用并行编译! 伟大的!
当前工具链选择:GCC4.9.2 适用于 Raspberry。
8:配置GDB调试设置
9:使用DS-5调试器新建调试项,如下图
尽量和我的图片设置一样
10:远程SSH登录Raspberry。
参考这个:
几乎是一样的。 尝试使用 root 帐户登录 Raspberry。
11:更改原来的hello.c源代码。 我们玩Raspberry不能只玩python/wiring-pi。 它们屏蔽了基本的文件访问知识,虽然方便,但缺乏学习意义。 我们操作扩展的ttyUSB0串口并缩短TXD和RXD。 抓住。
/************************** Demo for RaspberryPi **************************/ // MSG> Hi, I'm Automan, My WeChat account is OPC_davidlee // MSG> Let's be technical partner, study and day day up // MSG> Use DS-5 IDE to simplify your Arm SOC development #include #include #include #include #include #include #include #include #include #include #include #include #define DATA_LEN 0xFF /* test data's len */ //#define DEBUG 1 static int openSerial(char *cSerialName) { int iFd; struct termios opt; iFd = open(cSerialName, O_RDWR | O_NOCTTY); if (iFd < 0) { perror(cSerialName); return -1; } tcgetattr(iFd, &opt); //cfsetispeed(&opt, B57600); //cfsetospeed(&opt, B57600); cfsetispeed(&opt, B115200); cfsetospeed(&opt, B115200); //raw mode opt.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG); opt.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); opt.c_oflag &= ~(OPOST); opt.c_cflag &= ~(CSIZE | PARENB); opt.c_cflag |= CS8; // DATA_LEN bytes can be read by serial opt.c_cc[VMIN] = DATA_LEN; opt.c_cc[VTIME] = 150; if (tcsetattr(iFd, TCSANOW, &opt) < 0) { return -1; } return iFd; } int main(void) { char tmp[1024]; int len; int fd, i; int x = 0; printf("n[#1] Software operations demo:n"); x = x + 1; printf("x=%dn", x); x = x - (-1); printf("x=%dn", x); x = x * x - 1; printf("x=%dn", x); x = (x + 5) / 2; printf("x=%dn", x); printf("[#2] Hardware ttyUSB0 operations demo:n"); fd = openSerial("/dev/ttyUSB0"); for (i = 0; i < 3; i++) { tmp[i] = 'V'; } write(fd, tmp, 3); // send to ttyUSB0 for (i = 0; i < 3; i++) { tmp[i] = '0'; } len = read(fd, tmp, 3); for (i = 0; i < len; i++) { printf("Read value: %cn", tmp[i]); } printf("Finish test, DS-5 and PiB+ are OK!n"); return 0; }
12:激动人心的时刻到了,我们编译(debug版本只能调试,包含符号信息),Project->Build All(注意保存的文件可以再次编译才能生效)。
点击右上角的小爬虫,进入调试。
点击下图红圈即可进入调试连接。 hello执行文件会自动加载到/tmp文件夹中执行,GDBserver会自动执行。
如下:运行、断点、AppConsole输出都OK,完美!
如果想重新调试,可以点击绿色圆圈断开连接,然后重新连接。
至此,一个完美的IDE已经呈现在你的面前了。 剩下的请慢慢探索。 虽然你不需要写makefile,但我仍然建议学习使用Cross-GCC、Makefile、CGDB-debugger、GDB-server和Autotools。 毕竟,Cmake 等传统工具具有高度通用性。 当然,如果你和我一样大,那就像我一样玩吧。
最后说一句废话!
从拿到一个备用的Raspberry到完成IDE,我花了一周的时间来SETUP,这让我感到痛苦! 为什么没有人使用完整的 IDE 来玩 Raspberry? 老旧的命令行害死人,根本不跟上时代!
可以用同样的方法来搭配BeagleBone Black,不过笔者对此并不是很感兴趣。 BBB生态系统并不强大,但也足够了。 调试接口程序时,可以使用Arduino-M0配合Raspberry进行调试。 请注意IO电压是3V3,而不是5V0!
发扬Armfly精神,我决定贡献开源造福单片机开发者,早日开始Linux开发,让A装背后的世界变得彻底,不再神秘! 我真是太棒了! ! !
附:老外打造的用于Raspberry Pi的Arm DS-5,不详,但让我知道我的想法是可行的! 相信你自己!
我花了1天时间完成了教程,很想向人要一些版税! 好想想……好想想……啊啊啊。
等待奖励…
原作者:李伟(姓名:David Lee,QQ名:AutoMan,QQid:1694045209),转载时请注明出处,欢迎与爱好者进行技术交流。 原始PDF。
注:除非另有说明,文章内容均来自David个人真实理解,不存在刻意猜测故意忽悠人的意思。 由于个人水平有限,虽然我努力使内容正确,但错误在所难免。 请不要生气。 如果可以的话,请留言并通过电子邮件告诉我。 ()讨论。
这是7年前发表的文章。 请理解其中的信息可能已经发展或改变。
9,945