Cool Pi 4 model B 用户手册
第一章 初识
嵌入式Linux开发单板已经普及多年,选择一款合适的开发板对广大学生以及众多嵌入式爱好者尤为重要。良好的讨论社区以及丰富的学习资料,能够降低学习门槛,加深对新领域的探索兴趣,快速上手创意设计。
官方技术论坛:https://www.cool-pi.com
1.1 硬件接口
本派系具有丰富的硬件接口,涵盖嵌入式行业常用通信总线,如I2C、SPI、UART、CAN等。在多媒体音视频方面,能够支持8K 60帧视频输出。8核芯CPU能够满足日常多任务需求,如服务器、网关等应用场景。
上图中40 pin排母功能定义如下表(图中左下为编号1,左上为编号2,右下为编号39,右上为编号40)
默认信号功能 | 引脚编号 | 引脚编号 | 默认信号功能 |
3.3V | 1 | 2 | 5V |
/dev/i2c1 sda | 3 | 4 | 5V |
/dev/i2c1 scl | 5 | 6 | GND |
gpio 47 | 7 | 8 | /dev/ttyS0 uart txd 3.3V TTL |
GND | 9 | 10 | /dev/ttyS0 uart rxd 3.3V TTL |
gpio 128 | 11 | 12 | gpio 39 |
gpio 129 | 13 | 14 | GND |
gpio 130 | 15 | 16 | /dev/ttyS2 uart txd 3.3V TTL |
3.3V | 17 | 18 | /dev/ttyS2 uart rxd 3.3V TTL |
spi mosi | 19 | 20 | GND |
spi miso | 21 | 22 | gpio 40 |
spi clk | 23 | 24 | spi cs 0 |
GND | 25 | 26 | spi cs 1 |
/dev/i2c6 sda | 27 | 28 | /dev/i2c6 scl |
gpio 131 | 29 | 30 | GND |
gpio 132 | 31 | 32 | pwm2 |
gpio 133 | 33 | 34 | GND |
gpio 134 | 35 | 36 | gpio 138 |
gpio 135 | 37 | 38 | gpio 139 |
GND | 39 | 40 | gpio 115 |
备注:
a) 板内集成一颗RTC时钟芯片,连接在 i2c6节点下;
b) 以上gpio为默认代码配置,部分gpio可以通过更改配置复用其他功能,如can、uart、pwm等;
c) 电源供电支持常见TypeC接口适配器,若使用POE供电请安装POE扩展板使用。
第二章 上手
本派系主板支持多种磁盘启动,如SATA硬盘(通过USB转接线)、U盘、TF卡、EMMC等,均可以离线刷机。您可以提前下载镜像文件到任意电脑,安装刷机工具,制作系统盘。当您拿到本派系主板,插入启动盘通电即可开机使用,非常方便。
2.1 镜像地址
本派系提供参考镜像(通过百度云下载),也欢迎开发者分享交流镜像。
其他系统镜像在论坛上不定期更新,请关注。
2.2 镜像刷机
本派系支持多种刷机工具,如 Win32DiskImager、 balenaEtcher 。刷机工具无相关依赖,任意电脑均可以操作。
可选工具一
Win32DiskImager
备注:请注意设备选择待刷机的磁盘,刷机执行过程中会清除该磁盘空间内容数据。
可选工具二
balenaEtcher
备注:请注意设备选择待刷机的磁盘,刷机执行过程中会清除该磁盘空间内容数据。
推荐在linux系统(Debian、Ubuntu等)环境中刷机,假定待刷机的磁盘节点是sdx,可以使用如下指令完成:
dd if=镜像.img of=/dev/sdx bs=1M status=progress;sync
第三章 开发
本派系主板开放linux源码,方便开发者调试内核驱动。相应镜像制作方法可以在论坛www.cool-pi.com交流探讨。
3.1 内核编译
linux内核源码支持在X86-64环境开发编译,也支持在本派系主板上直接开发编译。相应方法一致,如下以本派系主板运行Ubuntu系统为例说明:
下载源码
ubuntu@coolpi:~$ mkdir test
ubuntu@coolpi:~$ cd test/
ubuntu@coolpi:~/test$ git clone https://gitee.com/yanyitech/coolpi-kernel.git
正克隆到 'coolpi-kernel'...
remote: Enumerating objects: 88605, done.
remote: Counting objects: 100% (88605/88605), done.
remote: Compressing objects: 100% (75148/75148), done.
执行脚本编译
ubuntu@coolpi:~/test/$ ./build-kernel.sh
编译完成后,在源码out目录下生成的文件,可用于更新系统或用于制作新镜像。
3.2 镜像制作
本派系镜像文件划分为两个分区(实际多个也可以,目前只使用两个),基本分区信息如下表:
分区名称label | 分区格式 | 分区大小 | 分区内容 |
system-boot | 第一个分区,FAT32 | 300MB | cmdline.txt config.txt initrd.img modules.tar.gz rk3588s-cp4.dtb vmlinuz |
writable | 第二个分区,ext4 | 根据系统大小决定 | rootfs系统文件+应用程序+驱动包 |
我们创建一个2GB镜像文件作为范例:
a) 创建img并分区
~$ mkdir img_test`
~$ cd img_test/`
~/img_test$ ls`
~/img_test$ dd if=/dev/zero of=coolpi.img bs=1M count=2048`
记录了2048+0 的读入`
记录了2048+0 的写出`
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 2.1999 s, 976 MB/s`
~/img_test$ fdisk coolpi.img
欢迎使用 fdisk (util-linux 2.31.1)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助): p
Disk coolpi.img:2 GiB,2147483648 字节,4194304 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xeeeeb672
命令(输入 m 获取帮助): n
分区类型
p 主分区 (0个主分区,0个扩展分区,4空闲)
e 扩展分区 (逻辑分区容器)
选择 (默认 p): p
分区号 (1-4, 默认 1):
第一个扇区 (2048-4194303, 默认 2048):
上个扇区,+sectors 或 +size{K,M,G,T,P} (2048-4194303, 默认 4194303): +300M
创建了一个新分区 1,类型为“Linux”,大小为 300 MiB。
命令(输入 m 获取帮助): t
已选择分区 1
Hex 代码(输入 L 列出所有代码): b
已将分区“Linux”的类型更改为“W95 FAT32”。
命令(输入 m 获取帮助): n
分区类型
p 主分区 (1个主分区,0个扩展分区,3空闲)
e 扩展分区 (逻辑分区容器)
选择 (默认 p): p
分区号 (2-4, 默认 2):
第一个扇区 (616448-4194303, 默认 616448):
上个扇区,+sectors 或 +size{K,M,G,T,P} (616448-4194303, 默认 4194303):
创建了一个新分区 2,类型为“Linux”,大小为 1.7 GiB。
命令(输入 m 获取帮助): p
Disk coolpi.img:2 GiB,2147483648 字节,4194304 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xeeeeb672
设备 启动 起点 末尾 扇区 大小 Id 类型
coolpi.img1 2048 616447 614400 300M b W95 FAT32
coolpi.img2 616448 4194303 3577856 1.7G 83 Linux
命令(输入 m 获取帮助): w
分区表已调整。
正在同步磁盘。
~/img_test$
b) 挂载分区格式化写入
~/img_test$ losetup -f
/dev/loop18
~/img_test$ sudo losetup /dev/loop18 coolpi.img
[sudo] xxx 的密码:
~/img_test$
~/img_test$ sudo kpartx -av /dev/loop18
add map loop18p1 (253:0): 0 614400 linear 7:18 2048
add map loop18p2 (253:1): 0 3577856 linear 7:18 616448
~/img_test$
~/img_test$ sudo mkfs.vfat -F 32 /dev/mapper/loop18p1
mkfs.fat 4.1 (2017-01-24)
~/img_test$ sudo fatlabel /dev/mapper/loop18p1 system-boot
fatlabel: warning - lowercase labels might not work properly with DOS or Windows
~/img_test$
~/img_test$ sudo mkfs.ext4 /dev/mapper/loop18p2
mke2fs 1.44.1 (24-Mar-2018)
丢弃设备块: 完成
创建含有 447232 个块(每块 4k)和 112000 个inode的文件系统
文件系统UUID:c4c8cda5-77ae-4872-9f50-4d4c20cf048f
超级块的备份存储于下列块:
32768, 98304, 163840, 229376, 294912
正在分配组表: 完成
正在写入inode表: 完成
创建日志(8192 个块) 完成
写入超级块和文件系统账户统计信息: 已完成
~/img_test$ sudo e2label /dev/mapper/loop18p2 writable
~/img_test$
~/img_test$ sudo mount /dev/mapper/loop18p1 /mnt/
预先准备好cmdline.txt config.txt initrd.img modules.tar.gz rk3588s-cp4.dtb vmlinuz
拷贝文件到挂载目录/mnt
~/img_test$ sudo umount /mnt/
~/img_test$ sudo mount /dev/mapper/loop18p2 /mnt/
预先准备好rootfs.tar.gz
解压根文件系统到挂载目录/mnt
请注意同时将驱动包一起解压到/mnt/usr/lib
~/img_test$ sudo umount /mnt/
~/img_test$ sync
~/img_test$ sudo kpartx -dv /dev/loop18
del devmap : loop18p2
del devmap : loop18p1
~/img_test$ sudo losetup -d /dev/loop18
~/img_test$ losetup -f
/dev/loop18
~/img_test$
恭喜您完成镜像制作!
此时您可以插入U盘或移动硬盘,使用dd方式愉快是刷写新固件。
3.3 镜像备份
本派系主板系统可以随时进行备份提取或重新制作新的镜像,方法比较简单,按照如下描述即可。
a) 将系统盘插入linux系统(Debian、Ubuntu均可)环境;
b) 挂载系统盘两个分区,一般系统都会自动挂载,请确认对应挂载目录;
c) 打开终端命令行,拷贝system-boot分区目录文件备份到本地目录(如/opt);
d) 打开终端命令行,切换到root权限,cd 到writable目录,执行压缩命令tar -czpvf /opt/rootfs.tar.gz *
e) 执行sync刷新磁盘写入;
至此已完成系统镜像备份,可按照3.2章节说明进行新镜像制作。