
#训练营#基于泰山派小手机项目
简介
复刻训练营官方示例,定制了自己的LOGO 、动画以及预置APP。考虑到后期还会扩展一些摄像头之类的外设,暂时没有打印包裹扩展版和屏幕的外壳。
简介:复刻训练营官方示例,定制了自己的LOGO 、动画以及预置APP。考虑到后期还会扩展一些摄像头之类的外设,暂时没有打印包裹扩展版和屏幕的外壳。开源协议
:GPL 3.0
(未经作者授权,禁止转载)描述
心得体会
- 立创举办的训练营,这是第二次参加。画板、焊接和硬件排错部分,自我感觉进步了。但是Linux和单片机的把玩重点还是不一样,很赞同吴工的一句话:先玩起来。
- 就在这种理念的驱使下,逼着自己跟着节奏走,最后发现,改设备树、调屏参、上报数据这些似乎和我没有交集的词汇,我居然也能上手弄他一下了;以前只能刷现成的固件,现在自己也能定制拥有自己LOGO、动画和预置APP的固件了。
- 当然,OS级别的设备,可玩性和复杂性是非常高的,还有许多需要学习的内容。这次训练营,最难能可贵的是给我们小白建立了一个玩机的“知识框架”,面对设备和需求,不再是束手无策的感觉,开始有了探索的方向。
复刻说明
> 在PCB和代码层面,完全复刻官方示例,因此原理图、驱动适配部分不再赘述。以下针对我认为需要关注的知识点、遇到过的问题以及自定义内容做个记录。
> 官方示例参见文档:【立创·泰山派RK3566】开发板、【胖妞手机】实战项目资料
- 画板:需要先导入板框结构。扩展板后面需要与泰山派、屏幕、喇叭、外壳其它配件等配合,所以对结构有严格的要求。
- 画板:用好等长调节的工具。【布线】菜单中有差分对布线、等长调节、差分对等长调节这几个工具。切忌自己用单路布线的方式去做,既麻烦又难看。
- DRC:当前螺丝孔的封装会导致DRC错误。因为这个封装里面画了紧挨在一起的4片焊盘,强迫症者可以自己动手修改一下封装。
- 焊接:NC器件暂不焊接。可依据自身需求和官方文档说明选择。
- 焊接:项目用到多个FPC座子,需要多多练习拖焊的手法,以及处理连锡的方法。官方贴心的提供了针对FPC的多种焊接教学视频,可参考。
- 硬件排错:接开发板通电前,务必使用万用表检查短路和断路的潜在风险。我先检查了所有3V3和GND是否有与其他引脚短接的现象;然后上电屏幕没有点亮,检查各处3V3均正常,没有元器件烧毁;继续检查其他引脚之间是否有短路,发现SDA和RST短接,从而将问题定位到了具体的FPC引脚;用小刀头处理短接的引脚,故障解决。
- 硬件排错:如果是打样,可以考虑给3V3、GND和其他重要的信号引出专门的测试点。
- 编译:编译环境的搭建在官方文档中有详细说明,这里提供一个
Android SDK
编译效率供大家参考。配置为虚拟机、N100 4-core、12GB RAM、325GB SSD
;第一次全编译8h22m
,第一次kernel编译0h13m
,后续仅installclean(非clean)再编译0h4m
;编译完成后,磁盘整体已用空间230GB
。编译环境各种异常的小伙办可参考最后一章节的编译实录。 - 个性化:开机LOGO。示例的尺寸只是一个参考,不是强制要求,可以按照屏幕分辨率设计,比如项目中用到的3.1寸屏分辨率为800x480;注意图片格式为BMP24位。
- 个性化:开机动画。类似我这种不是很擅长做动画的小伙伴,可以考虑用PPT完成动画设计,然后转成视频,再用官方文档提供的方法制作出动画资源包。
- 个性化:预置APP。受分区大小限制,预置的APP默认不能无限添加,具体怎么调整这个分区大小,我还没研究-_-!!!,有知道的小伙伴欢迎在留言中教教我。
玩机畅想
> 目前想到的一些未来玩机的点子,有的已经有先例,有的纯天马行空未做可行性验证。
- 作为桌面的AI助手,多种交互方式。
- 作为本地化AI平台,当前算力可能有问题,有NPU应该更合适,不过可以试试仅追求实现,不考虑效率。
- 运行ROS,作为大脑,与ESP32配合实现更复杂的场景。
- ……
成果展示
> 演示中使用的翻页时钟APP为Flip_clock_World_clock_1.2.8.6.apk
,无广告、无内购、功能切换人性化(具备日期时间显示、正计时、倒计时、专注时间统计功能)
- 开机LOGO和动画
- 定位平板设备应该有的APP
- 翻页时钟—日期时间(四周的小字都可以单击选择是否显示)
- 翻页时钟—可定制主题
- 翻页时钟—计时器
- 翻页时钟—专注
编译实录
> 按照官方文档准备编译环境是没问题的,这个过程应该比较顺利。但是发现群里还是有许多小伙伴在编译环节受阻了,因此在这里记录下我的一些心得。因为水平有限,以下内容仅供参考,如有错漏之处,欢迎指正。
1. 虚拟化工具
> 桌面级:Oracle VirtualBox、VMware Workstation Pro、Microsoft Hyper-V
企业级:VMware vSphere(ESXi)、Proxmox VE、Microsoft Hyper-V、Others KVM
以上都行,有任何一种的都不需要纠结选什么。如果你都没有,我的推荐如下:
- 在本地PC部署环境,使用VMware Workstation Pro(VMware被博通收购后,Workstation Pro面向个人用户免费了,官网下载先免费注册一个账号,当前最新版本17.5.2,直达产品页)
- 在小主机部署环境,使用VMware ESXi(单机部署,不使用vCenter及其他高级功能,可申请免费许可,或者试运行60天;不愿折腾的请使用开源的Proxmox VE)
- 虚拟化环境准备,网上教程很多,不再赘述。结合小伙伴反映的问题,以Workstation为例,最适合新手的网络为NAT模式。
> 以下步骤均在VMwre Workstation Pro 17.5.2中完成,Workstation的使用和Ubuntu的安装过程均为标准步骤,个别的提示(例如禁用侧通道缓存)在网上也很容易搜索到资料。受限篇幅,以下仅针对需要重点关注的部分进行说明。
2. 操作系统选择
编译和许多工具版本相关,工具版本又和系统版本相关,对于新手,请保持与官方版本一致。同时我推荐使用Server版而非Desktop版,并最小化安装,因为我们后续完全不会使用这个虚拟机的桌面和他预置的许多办公娱乐软件。因此推荐版本为:Ubuntu 18.04.x LTS Server 采用最小化部署。
下载ubuntu-18.04.6-live-server-amd64.iso
3. 操作系统准备
Ubuntu的安装过程需要重点关注:
- 配置网络
> 采用NAT网络,这个DHCP动态分配的IP基本不会变,可以直接下一步。不过以防万一,可以考虑采用以下步骤将动态分配的IP固化下来。
> 每个人的IP段不一定相同,图中是我手动设置的192.168.119.x,当前分配的地址x是129,请根据自己的实际环境修改。
> Workstation的NAT网络,默认网关和DNS是x.x.x.2
;x.x.x.1
是宿主机,也就是当前部署Workstation的PC。
- 替换软件源
> 可以选择在此处替换,也可以安装完成后用命令替换。
> 图中使用阿里云的镜像站https://mirrors.aliyun.com/ubuntu
- 创建分区
> 不要使用默认的分区规划,他不会将所有的磁盘空间都分配使用,所以有些小伙伴发现空间不足,还需要再做一些扩容操作。
> 为了简单这里仅添加/boot
和/
挂载点,除了启动分区分配2GB空间外,其他空间全部分配给根分区。
> 有些玩家会独立创建/home
挂载点,大部分的磁盘空间单独给home分区,或者采用LVM逻辑卷的管理方式,这个是推荐的,便于管理和扩容,但不是必须的。
- 添加用户
> 请记住此用户名和密码,后续登录系统、安装依赖环境、编译等一切过程,均使用此用户。Ubuntu不推荐直接使用root用户,编译本身也不需要使用root权限。
- 开启SSH
> 务必选中此选项,会安装并开启SSH远程登录。如果安装过程没有选择,安装完成后可以通过命令安装,相对复杂一些。
- SSH远程登录
> 系统安装完成并重新启动后,可以通过SSH工具远程连接了。
> 注意填写对应的IP地址和用户名。
> 可以查看根目录可用空间和IP地址信息等。
4. 编译环境准备
- 替换软件源(如系统安装期间已修改,可忽略)
sudo sed -i 's/http:\/\/cn.archive.ubuntu.com/https:\/\/mirrors.aliyun.com/' /etc/apt/sources.list
sudo apt update
- 配置时区
> 系统安装完成后,默认为UTC标准时区,使用如下命令进行修改。
sudo timedatectl set-timezone Asia/Shanghai
- 安装工具链
> 安装依赖包需要通过sudo
提权,提权需要输入当前账号的密码。可以通过配置/etc/sudousers
文件实现免密,但是本项目中意义不大。
> 如果希望在部署依赖包期间一直处于root权限下执行,可以通过sudo -i
实现。
sudo -i
apt update && apt install -y git python make openjdk-8-jdk git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libgl1-mesa-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libxml2-utils xsltproc unzip python bc imagemagick ccache schedtool libssl-dev libncursesw5-dbg libncursesw5-dev libncurses5 libncursesw5 libncursesada5-dev libncurses5-dbg libncurses5-dev libncursesada-doc libncursesada5 libncurses-dev libncurses-gst libncurses5-dev clang
- 创建工作目录
> 所有与SDK程序包相关的操作,确保都在非root用户下执行,避免权限出错。
> 以下示例在adam
用户下完成,该目录名建议与示例一致,便于使用后续的脚本。
cd ~
mkdir tspi_android_sdk_repo
- 配置smba服务
>smbpasswd
会为adam用户创建密码,该密码不同于系统登录密码,映射网盘时使用。
>smb.conf
文件可以通过vi
工具修改,以下逐条使用echo
是为了能够无脑复制粘贴。
> 注意按需修改/home/adam/tspi_android_sdk_repo
、= adam
与实际环境一致。
> 以下操作执行完成后,可以通过本地PC的资源管理器访问共享目录\\192.168.119.129\tspi
,推荐将其映射为网络驱动器。下文提到的Z:
盘,默认对应从本地PC访问\\192.168.119.129\tspi
目录,以及Ubuntu系统中/home/adam/tspi_android_sdk_repo
目录。
sudo -i
apt install -y samba
smbpasswd -a adam
echo "[tspi]" >> /etc/samba/smb.conf
echo "browseable = yes" >> /etc/samba/smb.conf
echo "path = /home/adam/tspi_android_sdk_repo" >> /etc/samba/smb.conf
echo "create mask = 0700" >> /etc/samba/smb.conf
echo "directory mask = 0700" >> /etc/samba/smb.conf
echo "valid users = adam" >> /etc/samba/smb.conf
echo "force user = adam" >> /etc/samba/smb.conf
echo "force group = adam" >> /etc/samba/smb.conf
echo "public = yes" >> /etc/samba/smb.conf
echo "available = yes" >> /etc/samba/smb.conf
echo "writable = yes" >> /etc/samba/smb.conf
systemctl restart smbd
- 导入Android SDK
> 在PC端,下载官方提供的程序包tspi_android_sdk_repo_20240202.tar.gz
,并存放至Z:
盘。
> 在Ubuntu端,执行解压操作。
cd ~/tspi_android_sdk_repo
tar -xzf tspi_android_sdk_repo_20240202.tar.gz
- 签出代码
> 解压完成后只有.repo
目录,这个目录是隐藏的。
> 解压完成后,可以删除压缩包tspi_android_sdk_repo_20240202.tar.gz
,节省部分磁盘空间。
> 然后将代码同步出来。
cd ~/tspi_android_sdk_repo
.repo/repo/repo sync -l -j88
- 切换分支
> 因为kernel目录多出来了东西,直接切换分支会报错,先清除再切换分支。
> 清除后切换到立创泰山派的分支。
cd ~/tspi_android_sdk_repo/kernel
git clean -xdf
cd ~/tspi_android_sdk_repo
.repo/repo/repo forall -c "git checkout lckfb-tspi-v1.0.0"
5. 全编译&单独内核编译
- 全编译
> 第一次编译时间较长,并且需要配置电源选项。
> 具体硬件配置对应的全编译耗时,请参考前文。
cd ~/tspi_android_sdk_repo && cd u-boot && ./make.sh rk3566 && cd ../kernel && make clean && make distclean && make ARCH=arm64 tspi_defconfig rk356x_evb.config android-11.config && make ARCH=arm64 tspi-rk3566-user-v10.img -j4 && cd .. && source build/envsetup.sh && lunch rk3566_tspi-userdebug && make installclean -j4 && make -j4 && ./mkimage.sh
- 单独编译内核
> 修改LOGO之类的操作,使用make
编译内核,单独烧录boot.img
使其生效。
cd ~/tspi_android_sdk_repo/kernel && make ARCH=arm64 BOOT_IMG=../rockdev/Image-rk3566_tspi/boot.img tspi-rk3566-user-v10.img -j4
- installclean
> 修改动画等操作,需要installclean以后再编译,然后重新烧录固件。
> 如果不需要打包update.img
,则省略命令最后的&& ./build.sh -u
部分,可以省一点时间。
cd ~/tspi_android_sdk_repo && source build/envsetup.sh && lunch rk3566_tspi-userdebug && make installclean -j4 && make -j4 && ./mkimage.sh && ./build.sh -u
- 特别推荐
> 我们通常SSH远程连接至Ubuntu编译服务器执行编译命令,而编译的时间一般也比较长。此时如果SSH连接因为断网、断电、休眠、误操作等意外原因断开,编译过程会中断,需要重新开始。
> 因此推荐使用screen
工具将编译的会话放入虚拟终端中,虚拟终端可以前台或后台运行,不受物理终端断开的影响。
>Ubuntu 18.04
默认已安装screen
工具。
基本使用方法如下:
# 推荐使用-R创建虚拟终端,如果已存在则进入,不会如-S参数重复创建
screen -R [name]
# 按Ctrl+a,再按d,即可保持当前会话到后台并回到物理终端
# 查询虚拟终端
screen -ls
# 使用-r参数回到指定的虚拟终端
screen -r [pid/name]
# 结束指定虚拟终端,使用-R/-r/-S均可,推荐进入需要退出的虚拟终端exit结束
screen -R [pid/Name] -X qut]
动态展示
设计图

BOM


评论