[置顶] 泰晓 RISC-V 实验箱,配套 30+ 讲嵌入式 Linux 系统开发公开课
[置顶] Linux Lab v1.4 升级部分内核到 v6.10,新增泰晓 RISC-V 实验箱支持,新增最小化内核配置支持大幅提升内核编译速度,在单终端内新增多窗口调试功能等Linux Lab 发布 v1.4 正式版,升级部分内核到 v6.10,新增泰晓实验箱支持
[置顶] 泰晓社区近日发布了一款儿童益智版 Linux 系统盘,集成了数十个教育类与益智游戏类开源软件国内首个儿童 Linux 系统来了,既可打字编程学习数理化,还能下棋研究数独提升智力
Linux Lab 真板开发日志(3):macOS 环境之 SD 卡、无线网卡、虚拟串口
By alitrack of TinyLab.org Jan 21, 2021
关于 i.MX6ULL Pro 开发板
首先非常感谢泰晓科技提供的 “i.MX6ULL Pro” Linux 开发板,这块开发板由 泰晓科技技术社区 与 野火电子 合作适配,是首款 Linux Lab 真板,可以直接用 Linux Lab 开展相关实验,大大降低开发板使用门槛,提升 Linux 内核和嵌入式 Linux 技术的学习效率。
主要配置:
- CPU:NXP i.MX6ULL Cortex-A7,800M,工业级
- 内存:512M DDR3L
- 存储:8GB eMMC 或者(512MB Nand-FLASH)
准备工作
- i.MX6ULL Pro 开发板
- macOS
- Docker
- 网线(插开发板eth1)
- EDUP EP-N8508GS(免驱无线网卡)
- 4GB 高速SD卡
i.MX6ULL Pro 开发板可以直接从 泰晓科技自营店 选购。
该开发板支持 SD 卡和 Wi-Fi,但不同时支持两者,而笔者刚好有一个很久之前买的 Linux 免驱 mini USB 无线网卡:EDUP EP-N8508GS,本文主要做的尝试就是:
- 烧录 Debian 镜像至 SD 卡
- SD 卡启动开发板
- 编译更新 zImage, dtb 和 modules
- EDUP EP-N8508GS 当作无线网卡
- EDUP EP-N8508GS 当作 SoftAP 热点
- 无网线时,Linux Lab 如何访问开发板
烧录 Debian 镜像至 SD 卡
- 下载 i.MX6ULL Debian 镜像
云盘资料:i.MX6ULL Debian 镜像百度云链接 链接:https://pan.baidu.com/s/1pqVHVIdY97VApz-rVVa8pQ 提取码:uge1
烧录到 SD 卡
推荐使用 Etcher, 也可以使用命令行命令
dd
。以下命令在 macOS 上执行,首先获得 SD 卡的信息:
$ diskutil list /dev/disk4 (external, physical): #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *4.0 GB disk4 1: Windows_FAT_16 BOOT 41.9 MB disk4s1 2: Linux 3.9 GB disk4s2
接着卸载,不然会报 Resource busy:
$ diskutil unmount /dev/disk4s2
然后烧录:
$ sudo dd if=~/Downloads/imx6ull-debian-buster-console-armhf-2020-11-26-344M.img of=/dev/disk4s2 bs=1m
通过 SD 启动开发版
插好 SD 卡,并根据文档,调整拨码开关为 2-5-8,然后上电启动。
通过串口访问开发板
i.MX6ULL Pro 带一个 USB 转串口(mini USB)和一个 micro USB(USB OTG), 第一个需要安装 CH340驱动 并重启 macOS。
可以访问串口的终端工具很多,Windows 下如 MobaXterm、secureCRT、xShell、Putty 等,macOS 下也可以使用 putty,当然电脑自带的 screen 也够用了。
先获得串口名(每台机器,每个 USB 口返回的结果不相同)
microUSB:
$ ls /dev | grep cu. /dev/cu.usbmodem1234fire56783
USB转串口:
$ ls /dev | grep cu. /dev/cu.usbserial-1420
通过串口访问开发板
$ screen -L /dev/cu.usbserial-1420 115200 -L
自带的 Debian 镜像不支持 EDUP EP-N8508GS , 下面试试 TinyLab 提供的 ebf-imx6ull。
编译更新 zImage, dtb 和 modules
准备工作目录
$ hdiutil create -type SPARSE -size 60g -fs "Case-sensitive Journaled HFS+" -volname labspace labspace.dmg $ hdiutil attach -mountpoint ~/Documents/labspace -nobrowse labspace.dmg.sparseimage $ cd ~/Documents/labspace
下载 Lab
$ git clone https://gitee.com/tinylab/cloud-lab.git $ cd cloud-lab/ && tools/docker/choose linux-lab
运行并登录 Lab
$ tools/docker/run linux-lab $ tools/docker/bash
选择 arm/ebf-imx6ull
$ make BOARD=arm/ebf-imx6ull
编译与安装
$ make kernel-build $ make modules-install
登录开发板
$ BOARD_IP=192.168.16.128 make login ... npi login: debian Password: temppwd <== default password, will be changed to linux-lab
允许 root 登陆并更改 root 密码
为方便起见,需要允许 root ssh 登录并把密码改为统一的
linux-lab
。debian@npi:~$ sudo -s root@npi:/home/debian# passwd root New password: linux-lab Retype new passwd: linux-lab root@npi:/home/debian# sudo sed -i -e "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config root@npi:/home/debian# sudo service sshd restart
上传 zImage, dtb 和 modules
$ make kernel-upload $ make dtb-upload $ make modules-upload
切换并用新镜像重新启动开发板
$ make boot
至此,SD 卡的系统已经更新为 Linux-lab 的版本。
配置 EDUP EP-N8508GS 为 Wi-Fi 网卡
在新的系统下,EDUP EP-N8508GS 支持即插即用。
$ lsusb
Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter
$ iwconfig
wlan0 IEEE 802.11 Mode:Master Tx-Power=20 dBm
Retry short limit:7 RTS thr=2347 B Fragment thr:off
Power Management:off
使用如下命令配置 Wi-Fi:
$ sudo connmanctl
connmanctl> tether wifi off
connmanctl> enable wifi
connmanctl> scan wifi
connmanctl> services
connmanctl> agent on
connmanctl> connect wifi_*_managed_psk
connmanctl> quit
检查 wlan0 的 IP 信息:
$ ifconfig
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.16.69 netmask 255.255.255.0 broadcast 192.168.16.255
inet6 fe80::ea4e:6ff:fe20:543 prefixlen 64 scopeid 0x20<link>
ether e8:4e:06:20:05:43 txqueuelen 1000 (Ethernet)
RX packets 218 bytes 37973 (37.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 301 bytes 41631 (40.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
配置 EDUP EP-N8508GS 为 softAP 热点
安装 hostapd
$ sudo apt install -y hostapd
配置 hostapd
$ vim /etc/hostapd/hostapd.conf interface=wlan0 hw_mode=g channel=1 wmm_enabled=0 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP ssid=alitrack wpa_passphrase=12345678910 ieee80211n=1
配置防火墙
添加 iptables 规则,将 wlan0 的包通过 eth1 转发:
$ sudo iptables –t nat –A POSTROUTING –o eth1 –j MASQUERADE $ sudo iptables –A FORWARD –m conntrack —ctstate RELATED,ESTABLISHED –j ACCEPT $ sudo iptables –A FORWARD –i wlan0 –o eth1 –j ACCEPT $ sudo sh –c "iptables-save > /etc/iptables.ipv4.nat"
打开内核 IP 转发:
$ vim /etc/sysctl.conf net.ipv4.ip_forward=1
配置网络
$ vim /etc/network/interface #auto wlan0 #allow-hotplug wlan0 #iface wlan0 inet dhcp auto wlan0 allow-hotplug wlan0 iface wlan0 inet static address 192.168.0.1 netmask 255.255.255.0 up iptables-restore < /etc/iptables.ipv4.nat
关闭 wpa_supplicant
$ pkill wpa_supplicant $ sudo systemctl mask hostapd
启动 hostapd
$ sudo systemctl enable hostapd $ sudo systemctl start hostapd $ sudo systemctl status hostapd
删除 autowifi.sh
$ mv /opt/scripts/boot/autowifi.sh ~/
重启 wlan0 或者开发板
$ sudo ifdown wlan0 $ sudo ifup wlan0 $ ifconfig wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::ea4e:6ff:fe20:543 prefixlen 64 scopeid 0x20<link> ether e8:4e:06:20:05:43 txqueuelen 1000 (Ethernet) RX packets 788 bytes 116163 (113.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 860 bytes 484140 (472.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
用手机尝试连接, 成功
无网线时,如何通过 Linux Lab 访问开发板
前面我们提到通过 IP 来访问开发板,如果非常不凑巧,你既没有无线也无网线可以用,怎么办?
很不凑巧,macOS 下,Docker 内目前无法直接访问串口,需要通过泰晓科技撰写的 串口虚拟化 来解决这个问题。
macOS 安装 socat
$ brew install socat
macOS 上串口转 TCP
$ sudo socat tcp-l:54321 /dev/cu.usbserial-1420,clocal=1,nonblock
Linux Lab 上 TCP 转虚拟串口
$ sudo socat pty,link=/dev/tty.virt001,waitslave tcp:192.168.1.168:54321
登录开发板
$ BOARD_SERIAL=/dev/tty.virt001 make login
小技巧
为了避免每次在命令行输入 BOARD_IP
和 BOARD_SERIAL
,可以把它们配置到 .labinit
中。
$ vim .labinit
BOARD_IP := 192.168.16.128
BOARD_SERIAL := /dev/tty.virt001
参考
猜你喜欢:
- 我要投稿:发表原创技术文章,收获福利、挚友与行业影响力
- 知识星球:独家 Linux 实战经验与技巧,订阅「Linux知识星球」
- 视频频道:泰晓学院,B 站,发布各类 Linux 视频课
- 开源小店:欢迎光临泰晓科技自营店,购物支持泰晓原创
- 技术交流:Linux 用户技术交流微信群,联系微信号:tinylab
支付宝打赏 ¥9.68元 | 微信打赏 ¥9.68元 | |
请作者喝杯咖啡吧 |
Read Album:
- Linux Lab 发布 v0.7 正式版,新增 Linux Lab 实验盘,一分钟内即可开展内核实验
- Linux Lab 真盘开发日志(6):体验内存编译的用法和好处
- Linux Lab 真盘开发日志(5):体验透明压缩带来的可用容量翻倍效果
- Linux Lab 真盘开发日志(4):在台式机、笔记本和 macBook 上即插即用
- Linux Lab 真盘开发日志(3):在 Linux 下直接启动 Linux Lab Disk,当双系统使用