admin 管理员组文章数量: 887021
泰山派第一期:环境搭建与SDK编译
- 第一部分
- 一、泰山派开发板简介
- 1、主板资源
- 2、系统框图
- 3、资源标注图
- 4、叠层设计
- 5、40PIN默认引脚定义图
- 6、40PIN引脚复用详细图
- 二、如何使用开发板
- 1、Android11固件(出厂默认)
- a、指示灯状态说明
- b、点屏幕hdmi屏幕测试
- c、没有hdmi情况下同屏工具使用
- d、电源小板的使用
- e、adb调试工具使用
- 1)准备工作
- 2)adb简介
- 3)adb下载和安装
- 4)adb使用
- f、串口打印(未)
- 2、ubuntu20.04(需自行烧录)(未)
- a、adb调试工具使用(adb与ssh二选一使用)
- b、串口打印
- c、ssh使用(adb与ssh二选一使用)
- 三、如何烧录固件
- 1、2+16版本
- a、驱动:DriverAssitant_v5.11安装
- b、烧录工具:RKDevTool_Release_v2.92安装
- c、下载(升级)模式说明及下载步骤
- 1)Loader升级模式
- 2)maskrom升级模式
- d、固件烧录测试
- 2、1+0版本(暂不介绍)
- a、TF卡准备
- b、读卡器准备
- c、SDDiskTool_v1.7升级卡制作工具安装
- d、固件烧录测试
- 四、环境搭建
- 1、电脑配置要求
- 2、搭建Ubunut系统编译环境的方式
- VirtualBox安装(推荐)(见“第二部分”!)
- vMware安装(推荐)
- win10+ubuntu双系统
- wsl2
- 3、SSH搭建(见“第三部分”!)
- 4、Samba搭建(见“第四部分”!)
- 五、SDK编译
- 见“第五部分”
- 第二部分 VirtualBox安装
- 一、下载VirtualBox安装包
- 二、安装VirtualBox
- 三、创建虚拟机
- 四、ubuntu系统的iso(镜像)文件下载
- 五、为虚拟机安装ubuntu系统
- 1、选择盘片
- 2、设置网络
- 3、开始安装
- 六、解决windows和虚拟机无法相互复制问题
- 七、系统快照(备份)
- 八、检查网络
- 1、虚拟机ping百度
- 2、虚拟机ping宿主机
- 3、宿主机ping虚拟机
- 九、虚拟机网络说明
- 1、Bridged(桥接模式)
- 2、NAT(网络地址转换模式)
- 3、Host-Only(仅主机模式)
- 4、总结
- 十、 删除虚拟机
- 第三部分 SSH搭建
- 一、虚拟机安装SSH服务
- 二、安装MobaXterm软件
- 三、MobaXterm软件中登陆ubuntu服务器
- 第四部分 samba搭建
- 一、为什么使用samba?
- 二、安装samba
- 三、配置samba
- 四、映射到windows
- 五、samba启动、停止、重启、查看状态
- 第五部分 SDK编译
- 一、环境
- 二、原理图讲解(主要是电源域)
- 三、编译Linux SDK(repo版本)
- 1、下载SDK
- 2、校验
- 3、解压
- 4、同步代码
- 5、安装编译环境
- 6、泰山派板级配置
- 7、编译buildroot系统(!!!!)
- 全编译
- 单独编译
- u-boot编译
- kernel编译
- buildroot编译
- Recovery编译命令
- 8、编译debian系统(只搬运教程,未测试)
- 9、编译ubuntu系统(未)
- 10、单独编译kernel(只适合带emmc版本)
- 四、编译Android11 SDK(repo版本)
- 1、下载SDK
- 2、校验
- 3、解压
- 4、同步代码
- 5、安装编译环境
- 6、全编译Android11(编译大概5个小时)
- 7、单独编译kernel(只适合带emmc版本)
- 五、单独编译“驱动模块”
- 1、配置Makefile
- 2、加载my_touch.ko
- 第六部分 docker编译(还是不太理解)
- 一、Docker 的安装
- 1、卸载旧版本
- 2、使用存储库安装
- 3、安装 Docker engine
- 4、验证安装完成
- 二、创建镜像
- 三、基于镜像创建容器
- 四、列出所有的容器
- 五、启动容器
- 六、退出容器
- 最后部分:一些其他问题
- 一、增强服务
- 二、输入命令后,最下方显示lines 1-14/14(end)
第一部分
一、泰山派开发板简介
1、主板资源
内存:2G
储存:16G
2、系统框图
3、资源标注图
4、叠层设计
5、40PIN默认引脚定义图
6、40PIN引脚复用详细图
二、如何使用开发板
1、Android11固件(出厂默认)
安卓系统做机顶盒看电视都可以。
a、指示灯状态说明
通电后,开发板闪灯。
若不闪灯。可能是没有EMMC(embedded MultiMediaCard)版本的。即泰山派是1+0版本,只有1G内存,没有储存。1+0版本需要TF卡做引导系统(做启动盘)。
b、点屏幕hdmi屏幕测试
插HDMI,就可以点亮屏幕。
屏幕可以搜树莓派屏幕购买。
c、没有hdmi情况下同屏工具使用
为什么要用scrcpy?
- 在泰山派没有接显示屏、触摸、鼠标、键盘等情况下,可以通过scrcpy投屏到电脑进行人机交互。
- scrcpy安装非常简单,在win10系统中下载点击运行就能使用。
- 连接非常简单,只需要typec数据线连到泰山派开发板。
- 画面流畅度和质量也很高。
- 最主要的是它是开源的https://github/Genymobile/scrcpy。
什么是scrcpy
scrcpy是一个用于镜像连接Android设备并通过USB或TCP/IP进行控制的应用程序。它可以将Android设备的视频和音频镜像到计算机,并允许使用计算机的键盘和鼠标来控制设备。scrcpy无需获取root访问权限,并且适用于Linux、Windows和macOS操作系统。
scrcpy的特点包括:
- 轻量级:原生应用,仅显示设备屏幕内容。
- 高性能:帧率在30到120之间,取决于设备性能。
- 高质量:支持1920×1080或更高分辨率。
- 低延迟:延迟约为35~70毫秒。
- 快速启动:显示第一帧画面只需约1秒钟。
- 非入侵性:在Android设备上不需要安装任何软件。
- 用户友好:无需帐号、无广告、无需互联网。
- 自由:免费且开源。
scrcpy的功能包括: - 音频转发(仅适用于Android 11及以上版本)。
- 录制屏幕。
- 在设备屏幕关闭时进行镜像。
- 双向剪贴板复制粘贴。
- 可配置的画质设置。
- 相机镜像(仅适用于Android 12及以上版本)。
- 作为摄像头的镜像(V4L2)(仅适用于Linux)。
- 模拟物理键盘/鼠标(HID)。
- 支持OTG模式等等。
所需前提条件: - Android设备至少需要API 21(Android 5.0)。
- 音频转发要求API >= 30(Android 11及以上版本)。
- 确保已在设备上启用了USB调试。
- 在某些设备上,还需要启用其他选项"USB调试(安全设置)"(与USB调试不同)才能使用键盘和鼠标进行控制。设置此选项后,需要重新启动设备。
- 注意,使用OTG模式运行scrcpy时不需要USB调试。
下载scrcpy
可以在scrcpy的GitHub页面https://github/Genymobile/scrcpy/releas上找到最新的发行版本和下载适合自己电脑的版本。这里只提供win64版本的,它支持linux mac需要其他的大家自己去git厂库。
下载完成后解压目录如下:
连接泰山派
将泰山派通过USB数据线连接到电脑,并保证进入android。
- 确保你的电脑供电充足,有些电脑usb供电能力步骤会导致泰山派无法进入系统,如果无法保证可通过PD诱骗电源小板进行补电。
- 确保USB调试选项已经打开,泰山派的Android固件都是默认打开ADB调试功能的,判断是否打开可以通过电脑是否有枚举ADB设备来判断。
- 使用带数据功能的数据线,不要用只有充电功能的。
启动scrcpy
找到刚解压出来的文件,双击scrcpy.exe启动scrcpy。
运行成功显示两个界面分别是命令行界面,和泰山派镜像页面。
命令行页面!
信息说明
INFO: ADB device found:
# 找到adb设备,如果开发板没有进入系统等异常这里会失败
INFO: --> (usb) ea16b3d63aceed1a device rk3566_tspi
# 泰山派的设备的信息:
# 'usb' 表示设备通过 USB 连接。
# 'ea16b3d63aceed1a' 是设备的序列号。
# 'rk3566_tspi' 泰山派android系统里的名称。
# 这个路径,就是scrcpy工具的路径
C:\Users\jlc\Desktop\scrcpy-win64-v2.3.1\scrcpy-server: 1 file pushed, 0 skipped. 66.0 MB/s (66007 bytes in 0.001s)
# adb把 scrcpy 服务器文件已经被推送到 Android 设备上,不理解的看adb部分
# 文件推送的速度是 66.0 MB/s
# 文件大小为 66007 字节,推送时间约 0.001 秒。
[server] INFO: Device: [rockchip] rockchip rk3566_tspi (Android 11)
# 这是 scrcpy 服务器提供的设备信息:
# 设备名为 rk3566_tspi。
# 运行的 Android 版本是 Android 11。
INFO: Renderer: direct3d
# 显示渲染器使用的是 Direct3D (Direct3D 是 Windows 中处理 3D 图形的一部分。
INFO: Texture: 1080x1920
# 表示展示在你电脑上的 Android 设备屏幕的尺寸为1080x1920
屏幕界面!
常用快捷键
到这里你就可以随心所欲的通过电脑玩转泰山派android系统啦!
关闭时,将同屏窗口的右上角关闭,再关闭前面打开的命令行界面。
d、电源小板的使用
电脑USB接口为泰山派供电,电脑USB最多只能输出500mA电流。当泰山派给其它多个设备供电时,电流会超过500mA时,泰山派会一直重启。板子会启动不起来。
启动不起来时,会用到电源小板。
断电后,插入电源小板。
电源小板的另一端可用12V的DC座供电,或者用Type-C(带PD诱骗的)。
以Type-C为例,诱骗成功后,小板上会亮灯。
按照诱骗小板背面的“表”,拨动拨码开关,选择诱骗到多少伏。
泰山派支持5-18V宽电压输入。
泰山派产生多少电流取决于“用电器”,设备越多,电流越多。
e、adb调试工具使用
暂时不打算使用安卓,所以此处只写教程,以win10为例。
1)准备工作
- 需要一台win10电脑,其他系统理论上也可以但是我没测试,我这里以我电脑为例,后续所有的环境以及开发编译如果不做特殊说明默认都是基于此配置电脑进行。
- 泰山派需烧录对于的Android系统固件
- ADB固件包
2)adb简介
ADB,全称为Android Debug Bridge,是由Google开发的一种命令行工具,用于与Android设备进行通信和调试。作为Android软件开发工具包(SDK)的一部分,ADB提供了一系列功能和命令,方便开发者进行与Android设备交互和调试的操作。
ADB的主要功能和用途如下:
- 设备连接与管理:ADB允许开发者通过USB或网络连接Android设备,并对设备进行管理。可以列出已连接的设备、安装或卸载应用程序、复制文件到设备等操作。
- 应用程序调试:ADB允许开发者在已连接的Android设备上进行应用程序调试。可以启动和停止应用程序、查看应用程序日志、监视CPU和内存使用情况等。
- 文件传输:ADB可以通过命令行在计算机和Android设备之间传输文件。这对于安装应用程序、传输媒体文件或备份数据非常有用。
- Shell访问:ADB提供了一个可以执行设备上的shell命令的接口,方便开发者进行设备调试、日志记录、系统状态查询等操作。
- 截图和屏幕录制:ADB可以进行屏幕截图和录制,以便开发者捕获设备屏幕上的图像和动画,并进行分析和调试。
- 端口转发:ADB支持将设备的端口转发到计算机的端口,方便开发者通过计算机与设备上运行的服务进行通信和调试。
- 设备控制:ADB提供了一些命令来进行基本的设备操作,如重启设备、关机、进入恢复模式等。
需要注意的,是虽然adb是为android开发的但是因为他很好用很流行所以在其他平台我们也是可以看到他的身影比如后面我们用到的buildroot、debian、ubuntu等。
3)adb下载和安装
下载安装包并解压,我这里直接下载并解压到D:盘,这里可以根据个人情况制定位置但是后面添加环境变量时也需要指定对应路径。
此时我们直接在当前目录打开命令行窗口是可以直接使用adb的,打开方法在文件目录栏直接输入cmd并回车。
在命令行窗口运行adb.exe help命令能够出现版本信息等表示adb正常。
上面我们adb.exe同目录下运行成功,但是我们实际使用的时候是想在任意位置打开cmd即可使用adb,所以我们需要把adb添加到windows的环境变量中,这里就以win10为例,其他大同小异。点击环境变量。
不想在任意位置打开cmd就使用adb,就不用添加环境变量。
找到adb文件夹,输入cmd,一样使用adb。
选择系统变量中的Path,然后点击点击编辑。
点击新建,接着把刚刚下载的adb.exe所在路径填入。
点击确定保存,接着打开一个新的cmd窗口,记得一定要新打开,之前打开不会同步环境变量。运行adb help看到以下日志就证明你成功啦~~~~
4)adb使用
一共11项
1、连接泰山派开发板
下面实验很多命令都是需要与泰山派进行交互,所以我们这里需要通过typec数据线把泰山派连接上。
- 泰派数据线连接电脑,注意:如果供电不足需要用电源诱骗小板补电,typec要有数据功能不单是充电线。
- android系统中打开USB调试,我们提供的固件默认是已经打开了的,手动打开方法:进入android系统界面–>Settings–>About tablet–>连续多少点击Build number打开开发者模式–>退回上级进入Sysem–>Advanced–>打开USB debugging选型。
- 打开设备管理器中能够正确找到Android ADB Interfaces设备。
2、adb命令学习方法
最好的学习方式就是阅读原文当,后面我会挑选一些adb高频的常用方法与大家分析,详细的还请参考谷歌官方手册:
3、如何快速掌握adb用法
一般我们使用命令行工具如:adb,makefile,git,python,Docker等,都会提供一个help命令来帮我们快速的了解它们的用法和参数选项。这些信息对于初学者来说尤其有用,可以作为入门指南和快速参考。建议新朋友养成工具不会用先help一下的习惯。以下是help的所有信息,这里我挑几个重要参数进行举例说明。
C:\Users\win>adb help
Android Debug Bridge version 1.0.41
Version 34.0.1-9680074
Installed as D:\platform-tools\adb.exe
global options:
-a listen on all network interfaces, not just localhost
-d use USB device (error if multiple devices connected)
-e use TCP/IP device (error if multiple TCP/IP devices available)
-s SERIAL use device with given serial (overrides $ANDROID_SERIAL)
-t ID use device with given transport id
-H name of adb server host [default=localhost]
-P port of adb server [default=5037]
-L SOCKET listen on given socket for adb server [default=tcp:localhost:5037]
--one-device SERIAL|USB only allowed with 'start-server' or 'server nodaemon', server will only connect to one USB device, specified by a serial number or USB device address.
--exit-on-write-error exit if stdout is closed
general commands:
devices [-l] list connected devices (-l for long output)help show this help message
version show version num
networking:
connect HOST[:PORT] connect to a device via TCP/IP [default port=5555]
disconnect [HOST[:PORT]]
disconnect from given TCP/IP device [default port=5555], or all
pair HOST[:PORT] [PAIRING CODE]
pair with a device for secure TCP/IP communication
forward --list list all forward socket connections
forward [--no-rebind] LOCAL REMOTE
forward socket connection using:
tcp:<port> (<localmay be "tcp:0" to pick any open port)
localabstract:<unix domain socket name>
localreserved:<unix domain socket name>
localfilesystem:<unix domain socket name>
dev:<character device name>
jdwp:<process pid> (remote only)
vsock:<CID>:<port> (remote only)
acceptfd:<fd> (listen only)
forward --remove LOCAL remove specific forward socket connection
forward --remove-all remove all forward socket connections
reverse --list list all reverse socket connections from device
reverse [--no-rebind] REMOTE LOCAL
reverse socket connection using:
tcp:<port> (<remote> may be "tcp:0" to pick any open port)
localabstract:<unix domain socket name>
localreserved:<unix domain socket name>
localfilesystem:<unix domain socket name>
reverse --remove REMOTE remove specific reverse socket connection
reverse --remove-all remove all reverse socket connections from device
mdns check check if mdns discovery is available
mdns services list all discovered services
file transfer:
push [--sync] [-z ALGORITHM] [-Z] LOCAL... REMOTE
copy local files/directories to device
--sync: only push files that are newer on the host than the device
-n: dry run: push files to device without storing to the filesystem
-z: enable compression with a specified algorithm (any/none/brotli/lz4/zstd)
-Z: disable compression
pull [-a] [-z ALGORITHM] [-Z] REMOTE... LOCAL
copy files/dirs from device
-a: preserve file timestamp and mode
-z: enable compression with a specified algorithm (any/none/brotli/lz4/zstd)
-Z: disable compressionsync [-l] [-z ALGORITHM] [-Z] [all|data|odm|oem|product|system|system_ext|vendor]sync a local build from $ANDROID_PRODUCT_OUT to the device (default all)
-n: dry run: push files to device without storing to the filesystem
-l: list files that would be copied, but don't copy them
-z: enable compression with a specified algorithm (any/none/brotli/lz4/zstd)
-Z: disable compression
shell:
shell [-e ESCAPE] [-n] [-Tt] [-x] [COMMAND...]
run remote shell command (interactive shell if no command given)
-e: choose escape character, or "none"; default '~'
-n: don't read from stdin
-T: disable pty allocation
-t: allocate a pty if on a tty (-tt: force pty allocation)
-x: disable remote exit codes and stdout/stderr separation
emu COMMAND run emulator console command
app installation (see also `adb shell cmd package help`):
install [-lrtsdg] [--instant] PACKAGE
push a single package to the device and install it
install-multiple [-lrtsdpg] [--instant] PACKAGE...
push multiple APKs to the device for a single package and install them
install-multi-package [-lrtsdpg] [--instant] PACKAGE...
push one or more packages to the device and install them atomically
-r: replace existing application
-t: allow test packages
-d: allow version code downgrade (debuggable packages only)
-p: partial application install (install-multiple only)
-g: grant all runtime permissions
--abi ABI: override platform's default ABI
--instant: cause the app to be installed as an ephemeral install app
--no-streaming: always push APK to device and invoke Package Manager as separate steps
--streaming: force streaming APK directly into Package Manager
--fastdeploy: use fast deploy
--no-fastdeploy: prevent use of fast deploy
--force-agent: force update of deployment agent when using fast deploy
--date-check-agent: update deployment agent when local version is newer and using fast deploy
--version-check-agent: update deployment agent when local version has different version code and using fast deploy
(See also
adb shell pm help
for more options.)
uninstall [-k] PACKAGE
remove this app package from the device
'-k': keep the data and cache directories
debugging:
bugreport [PATH]
write bugreport to given PATH [default=bugreport.zip];
if PATH is a directory, the bug report is saved in that directory.
devices that don't support zipped bug reports output to stdout.
jdwp list pids of processes hosting a JDWP transport
logcat show device log (logcat --help for more)
security:
disable-verity disable dm-verity checking on userdebug builds
enable-verity re-enable dm-verity checking on userdebug builds
keygen FILE
generate adb public/private key; private key stored in FILE,
scripting:
wait-for[-TRANSPORT]-STATE...wait for device to be in a given state
STATE: device, recovery, rescue, sideload, bootloader, or disconnect
TRANSPORT: usb, local, or any [default=any]
get-state print offline | bootloader | device
get-serialno print <serial-number>
get-devpath print <device-path>
remount [-R]
remount partitions read-write. if a reboot is required, -R will
will automatically reboot the device.
reboot [bootloader|recovery|sideload|sideload-auto-reboot]
reboot the device; defaults to booting system image but
supports bootloader and recovery too. sideload reboots
into recovery and automatically starts sideload mode,
sideload-auto-reboot is the same but reboots after sideloading.
sideload OTAPACKAGE sideload the given full OTA package
root restart adbd with root permissions
unroot restart adbd without root permissions
usb restart adbd listening on USB
tcpip PORT restart adbd listening on TCP on PORT
internal debugging:
start-server ensure that there is a server running
kill-server kill the server if it is running
reconnect kick connection from host side to force reconnect
reconnect device kick connection from device side to force reconnect
reconnect offline reset offline/unauthorized devices to force reconnect
usb:
attach attach a detached USB device
detach detach from a USB device to allow use by other processes
environment variables:$ADB_TRACE
comma-separated list of debug info to log:
all,adb,sockets,packets,rwx,usb,sync,sysdeps,transport,jdwp$ADB_VENDOR_KEYS colon-separated list of keys (files or directories)$ANDROID_SERIAL serial number to connect to (see -s)$ANDROID_LOG_TAGS tags to be used by logcat (see logcat --help)$ADB_LOCAL_TRANSPORT_MAX_PORT max emulator scan port (default 5585, 16 emus)$ADB_MDNS_AUTO_CONNECT comma-separated list of mdns services to allow auto-connect (default adb-tls-connect)
Online documentation: https://android.googlesource/platform/packages/modules/adb/+/refs/heads/master/docs/user/adb.1.md
4、列出已连接的设备列表
adb devices
此命令是列出所有连接设备,这命令平时少用,一般在同时连接了多个开发板才会用到这个命令。例如我这里连接了两台泰山派开发板。
案例:打开命令行窗口运行以下命令:
C:\Users\win>adb devices
List of devices attached
4d70015485fe537b device
4d70015485fe537b device
这里只是告诉大家有这个功能,后面都是基于一台设备情况下的操作。
5、启动设备的命令行
进入命令:
adb shell
命令说明:
连接到设备的 shell,你可以在命令行中直接输入命令,并且设备会执行这些命令。例如,你可以运行常见的 Linux 命令、执行设备特定命令,或使用各种adb工具提供的功能。
#进入设备
adb shell
#使用root权限
su
#在泰山中使用ls命令ls#在泰山派中使用pwd查看路径pwd#查看泰山派kernel日志-----非常重要-------
dmesg
#查看系统层日志-----非常重要-------
logcat
退出命令
exit
6、安装应用程序
adb install
打开cmd窗口运行以下安装命令其中C:\Users\win\Downloads\chrome.apk是安装包位置这里代替成自己的安装包目录即可。
C:\Users\win>adb install C:\Users\win\Downloads\chrome.apk
Performing Streamed Install
Success
提示安装成功并且我可以在android系统中看到Chrome图标。
同时我们也可以通过命令来查看是否安装成功,其中"adb shell pm list packages"命令使列出所有包并且通过grep 过滤出包含"chrome"关键字的包,如果想查看全部可以不加 “| grep chrome”
C:\Users\win>adb shell pm list packages | grep chrome
package:com.android.chrome
7、卸载应用程序
有安装肯定有卸载卸载命令是:
adb uninstall
先使用命令列出所有包,然后找到自己要卸载的应用
C:\Users\win>adb shell pm list packages
package:com.android.cts.priv.ctsshim
package:com.android.keychain
package:com.android.chrome
以下省略N行
假如我们这里需要卸载chrome,对应上面第四行。
C:\Users\win>adb uninstall com.android.chrome
Success
8、将文件从电脑复制到设备
这个功能非常实用的在调试设备的时候需要经常传东西,掌握这个命令的使用以后就不要再拿U盘考来考去啦。
adb push
在使用"adb push"命令将文件推送到 Android 设备之前,有时需要先执行 remount 操作,以便将设备的文件系统以可写模式挂载。默认情况下,Android 设备的文件系统通常以只读模式挂载,这是为了保护系统的完整性和安全性。这意味着你无法直接向设备的文件系统写入文件或修改系统文件。通过执行 remount 操作,可以将文件系统从只读模式切换为可写模式,允许向设备的文件系统写入文件或修改系统文件。因为执行remount需要root权限所有先执行root在执行remount。
#执行root
C:\Users\win>adb root
restarting adbd as root
#执行romout
C:\Users\win>adb remount
Using overlayfs for /system
Using overlayfs for /vendor
Using overlayfs for /odm
Using overlayfs for /product
Using overlayfs for /system_ext
Now reboot your device for settings to take effect
remount succeeded
命令格式为:“adb push 文件目录 开发板中的目录”
C:\Users\win>adb push C:\Users\win\Downloads\chrome.apk /data
C:\Users\win\Downloads\chrome.apk: 1 file pushed, 0 skipped. 48.3 MB/s (236058891 bytesin4.661s)
#进入查看是否成功
C:\Users\win>adb shell
rk3566_tspi:/# ls /data/c
cache/ chrome.apk#发现一直存在目录里了
9、将文件从设备复制到电脑
adb pull
“adb pull 开发板中的目录 文件保存目录”。
#在泰山派开发板中创建一个测试文件
rk3566_tspi:/data# echo "tispi" > pulldemo.txt#退出shell终端
rk3566_tspi:/data# exit#这里正式开始测试,我们把刚刚在/data/文件夹下的创建的pulldemo.txt复制到电脑C:\Users\win\Downloads中
C:\Users\win>adb pull /data/pulldemo.txt C:\Users\win\Downloads
#提示传输速率时间等,表示成功
/data/pulldemo.txt: 1 file pulled, 0 skipped. 0.0 MB/s (6 bytesin0.002s)
打开查看
10、查看设备的日志信息
下面这几个命令就非常重要了,我们调试代码分析问题大多数多是会打印日志来定位分析,大家之后如果有问题需要交流探讨建议也附上logcat与dmesg日志
- logcat简单理解为负责Android层日志输出
adb logcat
- dmesg简单理解为负责Linux层日志输出
adb dmesg
11、进入升级模式
adb reboot loader
f、串口打印(未)
泰山派的串口波特率是1500000,所以使用前需要查看USB转串口模块是否支持1500000的波特率。
小手机项目中,使用CH343G芯片,通过pogopin连接泰山派的RXTX,可以使用串口。
等小手机转接板到了后,来补充串口的教程。
天空星,下载相应的固件后,可以支持SWD下载和串口
支持串口功能,我以为板子上会有CH系列的芯片,检查后发现没有
所以,应该是通过程序,令GD32F4系列芯片有了这个功能。
我记得稚辉君有个“下载器”,做的比较精致,等有机会研究研究设计一个。
搜了一下,叫Ultralink,淘宝498,有脱机下载功能,但还是需要接线
无线的下载器更好
2、ubuntu20.04(需自行烧录)(未)
a、adb调试工具使用(adb与ssh二选一使用)
adb类似于ssh
电脑装了虚拟机,可以用SSH远程登录虚拟机。
同样,电脑连接了泰山派Ubuntu,可以用adb连接泰山派Ubuntu。
应该与安卓11的adb一样使用
b、串口打印
c、ssh使用(adb与ssh二选一使用)
三、如何烧录固件
1、2+16版本
a、驱动:DriverAssitant_v5.11安装
首先要做的是安装驱动,有了驱动你在后面的RKDevTool_Release_vXXX升级工具中才能识别到loader设备。
下载驱动的压缩包,将压缩包解压,打开解压后的文件夹,找到 DriverInstall.exe。
双击 DriverInstall.exe 文件来运行安装程序。根据系统的安全设置,可能需要管理员权限来运行该程序。如果出现安全提示,请确给予管理员权限。
如果之前没有安装过直接点击安装即可,如果之前安装过驱动,需要先点击卸载旧驱动,然后再点击安装“弹出安装驱动成功弹窗”证明安装成功。
完成安装后关闭安装程序。
b、烧录工具:RKDevTool_Release_v2.92安装
下载烧录工具的压缩包,将压缩包解压,打开解压后的文件夹,找到 RKDevTool_Release_v2.92.exe。
双击 RKDevTool_Release_v2.92.exe 运行烧录工具即可。
因为瑞芯微工具对不同电脑兼容都有差异,我们通过下面方式尽量规避一些问题
1、请用Win10系统电脑;
2、如果是1+0版本需要TF制作系统的U盘尽量买好的,测试发现比较差的U盘容易导致蓝屏和软件闪退,绿联的还行;
3、安装路径尽量避免出现中文以及特殊字符;
c、下载(升级)模式说明及下载步骤
两种模式的区别:(只明白区别即可)
1)Loader升级模式
使用typec数据线连接泰山派开发板和电脑
泰山派开发板下面板载了三个按键,进入Loader升级模式主要用到两个按键分别是RST与REC。进入Loader升级模式方法是:(前提是连接好电脑,并打开烧录软件)先按住REC按钮不放,接着按下复位按键并松开(按下后就松开),当烧录软件中出现“发现一个LOADER设备”后再松开REC按钮,下面就可以进行升级操作了。
具体操作步骤为:
1. 发现设备升级模式类型:LOADER模式或者MASKROM模式
2. 加载固件(选择要烧录的固件)
3. 加载固件目录
4. 点击升级
5. 升级日志,时间有点长,耐心等待
2)maskrom升级模式
在实际开发过程中我们Loader模式我们使用的更多,MaskRom模式主要是用来“救砖”的。也就是当你boot都损坏的情况才会去使用。进入MaskRom方法,先断开typec给开发板断电,泰山派开发板“MicroHDMI”附近有两个触点,使用镊子短接这两个触点,然后进行上电操作,当烧录软件中出现“发现一个MASKROM设备”后松开镊子。
或者在上电的情况下,镊子短接两个触点,然后按以下复位。(视频里讲的,未验证)
接下来就可以和上面一样进行加载镜像烧入了。
d、固件烧录测试
android11
ubuntu20.04(测试)
debian
buildroot
2、1+0版本(暂不介绍)
a、TF卡准备
TF卡作为存储器件,建议容量16G以上,不建议使用“闪迪”品牌。
b、读卡器准备
好一点的读卡器可以降低蓝屏概率。
c、SDDiskTool_v1.7升级卡制作工具安装
d、固件烧录测试
debian
buildroot
ubuntu20.04
四、环境搭建
1、电脑配置要求
Android以及Linux SDK都非常庞大,所以对电脑的要求会比编译单片机高很多,我们电脑配置越好编译的速度就会越快,影响编译速度三点因素主要是CPU线程数、内存大小、硬盘的读写速度。
CPU:
必须为 64 位的多核处理器,推荐使用至少 4 核心的 CPU。
内存:
推荐使用 16 GB 或更高容量的内存。
硬盘:
Android 11 编译完成后的大小为204G,要编译Android的话需确保大于204G的存储空间。
Linux 编译完成后的大小为80G,要编译Linux 的话需确保大于80G的存储空间。
操作系统:
推荐使用 Ubuntu 18.04 LTS 64 位版本或者更高版本的 Linux 操作系统。
2、搭建Ubunut系统编译环境的方式
Ubuntu是一个免费的计算机操作系统,类似于Windows或MacOS。它是基于Linux的,意味着它非常稳定和安全。因为它易于使用、得到广泛支持、稳定可靠,并且提供了预打包的开发工具,所以绝大多少情况都会使用Ubunut系统来编译Android和Linux系统。
常见的安装方法主要有一下三种:
1、虚拟机:
在Windows电脑上使用虚拟机软件(例如VirtualBox、VMware等)在计算机上创建一个虚拟的计算机环境,并在其中安装Ubuntu系统。这种方法允许你在现有的操作系统上同时运行Ubuntu,无需对硬盘进行分区或重新引导,这种方法在学习阶段最常见,网上资料教程都很多,也是我们最推荐初学者使用的,但是VMware是收费有版权问题,所以这个需要大家自己想办法安装,如果安装时候碰到问题欢迎联系我们交流探讨。
2、Windows子系统 Linux(WSL2):
如果你使用的是Windows 10操作系统,可以使用Windows Subsystem for Linux(WSL)来运行Ubuntu。WSL是一个兼容性层,允许你在Windows系统中运行Linux发行版,包括Ubuntu。通过WSL,你可以在Windows环境运行Ubuntu,这种方法最简单,但是听说WSL问题比较多,而且性能不如另外两种。
3、直接安装:
将Ubuntu操作系统直接安装到计算机的硬盘上来使用。这需要创建一个启动盘,将其插入计算机并从该启动盘引导,然后按照安装向导的指示进行操作。这种方法将在计算机上建立双重引导,让你选择在启动时使用Ubuntu或其他操作系统,这种方法性能最优秀,笔者平时就是用的这种方法。
VirtualBox安装(推荐)(见“第二部分”!)
建议安装Ubuntu 18.04.6 LTS版本。
这里暂时使用这个安装方式。
具体安装步骤见“第二部分”!!!
vMware安装(推荐)
建议安装Ubuntu 18.04.6 LTS版本
win10+ubuntu双系统
不推荐,搞不好会坏电脑系统
wsl2
3、SSH搭建(见“第三部分”!)
SSH全称secure shell,安全外壳协议(安全的shell),是一个计算机网络协议(默认端口号为22)。通过ssh协议可以在客户端安全(提供身份认证、信息加密)的远程连接LInux服务器或其他设备。
使用广泛的Xshell软件就是基于SSH协议远程连接。
SSH远程连接之后,就可以像操作本地的机器一样操作远程机器。当需要操控的机器不在本地时就可以使用ssh协议远程连接操控。
具体搭建步骤见“第三部分”!!!
4、Samba搭建(见“第四部分”!)
为了把虚拟机ubuntu中的文件目录映射到windows盘符下,这样你就可以和访问windows盘符目录一样去访问ubuntu系统里面的内容。
五、SDK编译
见“第五部分”
第二部分 VirtualBox安装
一、下载VirtualBox安装包
下载VirtualBox安装包:下载地址
根据自己电脑选择VirtualBox安装包的版本。
一般选择windows。
点击后自动开始下载,大约106M。
二、安装VirtualBox
双击运行VirtualBox-7.0.14-161095-Win.exe:
选择我接受,然后点击下一步。
这里可以自定义你的安装位置,一般不安装在C盘。可以D:\VirtualBox
选择是
选择是
选择安装
点击完成,因为我们勾选了安装后运行,所以点击完成后会自动打开软件。
若没有勾选“自动运行”,可在桌面找到图标,双击运行。
三、创建虚拟机
设置虚拟机名字,名字为英文字符(最好是小写),虚拟机的保存位置空间尽可能的大,如果编译泰山派的android+linux起码要400G。
选择内存和处理,建议绿色拉满,尽量是越多越好。(绿色拉满就行)
创建虚拟硬盘,这里因为我们要放泰山派SDK所以我们选择了500G,免得后面内存焦虑,接着点击下一步。
展示信息,点击下一步。
创建完成。(若上面勾选“预分配空间”,这个地方会显示“创建介质”,速度比较慢。创建介质完成后,会显示创建虚拟机成功)
注意事项!!!
1、显示
合理设置“显存”大小,显存太小会导致虚拟机无法全屏显示。
2、存储
硬盘接口通常分为五种类型:SATA接口硬盘(串行)、IDE接口硬盘(并行)、SCSI接口硬盘、光纤通道硬盘、SAS接口硬盘。
硬盘分为固态硬盘(SSD 盘)、机械硬盘(HDD)、混合硬盘(HHD)三种。SSD采用闪存颗粒来存储,HDD采用磁性碟片来存储,混合硬盘(HHD: Hybrid Hard Disk)是把磁性硬盘和闪存集成到一起的一种硬盘。
这里我的电脑为IDE接口类型的SSD硬盘。这里是引用
四、ubuntu系统的iso(镜像)文件下载
使用这个版本的ubuntu镜像文件:ubuntu-18.04.6-desktop-amd64
三个下载地址:
中科大源
阿里云源
官方(很慢不推荐)
这里选择阿里云源下载:
等待下载完成。
五、为虚拟机安装ubuntu系统
1、选择盘片
点击虚拟机,然后点击设置
注意!!! 存储这里,第一IDE控制器从通道没有盘片!!
后面为它添加ISO文件!
进入设置界面选择存储,在选择没有盘片,接着点击“选择虚拟盘”,选择前面下载好的ubuntu-18.04.6-desktop-amd64.iso
点击确定
2、设置网络
方式1:
为了后面能够ubuntu连网,并且和windows互ping,我们设置两张网卡。网卡1用来访问外网(虚拟机与互联网连接),网卡2用来和windows互ping(虚拟机与“自己电脑”连接),设置完成后点击确定。
勘误,放弃这种方法。原因:选择这种方法是因为我当时选择桥接网卡模式不能上外网后面发现是公司屏蔽导致,所以当时使用此解决方案,在使用过程中发现这种方法有一张网卡容易掉!!!
方式2:
直接使用桥接网卡就行,桥接模式将虚拟机直接连接到你的物理网络。以这种方式设置时,虚拟机将从网络中获得一个独立的IP地址,就像另一台物理机一样。使用桥接适配器,您可以ping通百度,并从Windows 宿主机与Ubuntu虚拟机互ping。
选择桥接网卡时,有个问题
笔记本有线网络和无线网络选择的桥接网卡不一样!!!
之前一直用有线网络,回家后换到无线网络,发现虚拟机ping不通了
于是就发现了这个问题
3、开始安装
点击启动虚拟机。
如果弹出消息,可以点击右上角关闭。
如果你鼠标点击了,会出现这个,选择取消。
这个有些人会出现,有些人不会出现,出现以后选择中文或者英文,通过上下按键切换选择,回车键确定选择。(最好是选择英文)
这个也有些人会出现,有些不会,出现了就回车选择。
选择英文,并鼠标点击安装ubuntu。
选择continue。
选择最小安装,点击continue。
擦除磁盘再安装。
选择Continue。
地区随便选择。
输入你的名字和密码,然后点击continue。
等待安装完成。
安装完成,提示重启,点击现在重启。
因为我们这里启动项是ISO引导文件,所以提示移除光盘。
选择设备,分配光驱,选择ubuntu-18.04.6-desktop-amd64.iso
选择移除虚拟盘。
强制释放。
接着重启。
确定重启。
重启完成后,ubuntu系统安装完成。
六、解决windows和虚拟机无法相互复制问题
第一步:共享粘贴板选择双向。
第二步:选择安装增强功能。
注:
运行。
输入密码。
安装完成关闭窗口。
重启生效。
七、系统快照(备份)
控制中有“生成备份”,点击。
添加信息,并点击确定。
虚拟系统右侧会显示,正在生成备份。
查看系统快照。
点击“回复备份”后,会提示,要求创建当前版本的备份,然后再“回到V1.0.0”版本。
八、检查网络
ping不通,需要关闭防火墙。
ping通后,虚拟机内部浏览器可上网。
1、虚拟机ping百度
打开虚拟机终端,输入ping www.baidu
结果为:
ctrl+c:中止终端中的运行程序。
2、虚拟机ping宿主机
宿主机中,右键打开“终端”。
输入ip config
,点击回车,查看以太网地址IPV4。
如果宿主机使用有线网络,则使用以太网的地址。
如果宿主机使用无线网络。则使用WLAN的地址。
有多个“以太网适配器”的原因是有多个网卡,安装VMware、docker这类的虚拟化程序都会新增一个虚拟网卡。
默认使用“以太网适配器 以太网”的IPV4地址。
注:
以太网是一种局域网,只能连接附近的设备
因特网是广域网,我们可以通过因特网连接到世界各地。
两者都算是用来连接电脑的网络,但是两者的范围是不同的。以太网是局限在一定的距离之内的,我们可以有成千上百个以太网;但是因特网呢,是最大的广域网了,我们只有一个因特网,所以因特网又可以说是网络中的网络
在虚拟机中打开终端,输入ping 192.168.10.2
,地址为自己电脑实际的地址。
出现下面的结果,说明连接成功。
ctrl+c:中止终端中的运行程序。
3、宿主机ping虚拟机
虚拟机中打开终端,输入ifconfig
,查看虚拟机的地址。
第一次使用ifconfig时,会出现提示,按照提示安装工具即可。
在宿主机的终端里输入,ping 192.168.10.8
。
出现下面的结果为测试通过。
九、虚拟机网络说明
一般虚拟机都会提供了三种网络工作模式,分别是:
1、Bridged(桥接模式)
2、NAT(网络地址转换模式)
3、Host-Only(仅主机模式)
1、Bridged(桥接模式)
桥接模式就是将主机的网卡,与虚拟机虚拟的网卡利用虚拟网桥进行通信。
类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干扰。
虚拟机ip地址需要与主机在同一个网段,如果需要联网,则网关与DNS需要与主机网卡一致。
其网络结构如下图所示:
VirtualBox虚拟机会默认安装Bridged网卡和Host-Only网卡:
安装后可以在“此电脑”上右键,查看“管理”,“设备管理器”,“网络适配器”
在虚拟机里选择要桥接的物理网卡,这里选择的是Realtek这个网卡。
虚拟机终端中输入ifconfig
查看网卡
宿主机终端中输入ipcinfig
查看网络
虚拟机和宿主机网卡中的网络地址都是198.168.10,两者都是在同一网段下,可以互通。
小结:
1、桥接模式:物理机和虚拟机在网络上是一样的,虚拟系统相当于在此网络下的一个独立系统,需要分配网络的一个独立IP。
2、连接时指定的桥接到哪个物理网卡,相当于要把虚拟系统接到那个网段的交换机上。
2、NAT(网络地址转换模式)
NAT模式下,虚拟机访问网络的所有数据都是由宿主机提供的,虚拟机并不真实的存在于网络上,主机和网络中的任何机器是不能查看和访问这个虚拟机的。
NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网。
DHCP用于动态分配虚拟机的IP地址。
物理机下的虚拟网卡,在VMware下是VMnet8网卡,在VirtualBox下不可见。
另外,在连接上:
虚拟机可以通过网络访问主机.
主机无法通过网络访问虚拟机。
小结:
1、这种虚拟系统都是隐藏在物理机后面的机器,在网络上是看不见的,地址由DHCP负责分配,上网有NAT设备负责。
2、这种网络连接实现有些系统不需要暴露在网络节点上又需要上网的这种需求,这也是最简单的一种虚拟机使用方式。
3、Host-Only(仅主机模式)
Host-Only听名字就是只和主机建立关系。这种模式是将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯。
它的网络结构是在NAT网络的基础上,去除虚拟NAT设备让它不能上网,如下图所示:
在虚拟机安装完后,windows下就会多出来一个Host-Only网卡,这个虚拟网卡就是用来实现通信用的。
在选择Host-Only模式时,需要选择一块Host-Only网卡用于和虚拟机进行通信使用:
相互ping都是通的,这里不再验证。
4、总结
桥接模式:实现虚拟机在真实的网络上;
NAT模式:实现虚拟机隐藏在宿主机之后,能上网,但不能访问宿主机;
Host-Only模式:实现虚拟机隐藏在宿主机之后,不能上网,但可以访问宿主机;
上面只是介绍选用一个网络模式的情况,在实际使用中,我们还可以同时使用两种及以上的网络模式,比如:NAT + Host-Only,这样可以实现虚拟机上网和宿主机通信两种能力。
十、 删除虚拟机
在虚拟机上右键,点击删除。
出现这个界面后,看个人情况。如果你只是想删除虚拟机,则选“只是移除”,若是想删除所有文件,包括虚拟机,则选“删除所有文件”。
第三部分 SSH搭建
为了远程登陆虚拟机(或者叫作服务器)
一、虚拟机安装SSH服务
安装ssh服务。
在虚拟机终端中,依次输入下面的命令。
sudo apt-get update
显示结果
sudo apt-get install openssh-client
显示结果
sudo apt-get install openssh-server
显示如果
启动ssh服务。
/etc/init.d/ssh start
显然如下表示启动正常
[ ok ] Starting ssh (via systemctl): ssh.service.
显示结果
查看是否安装成功
sudo ps -e | grep ssh
二、安装MobaXterm软件
官网下载Mobaterm软件:下载地址
选择左侧的免费版本。
下面再选择左侧,左侧为便携版打开就能用,右边安装版本就直接下一步下一步。
三、MobaXterm软件中登陆ubuntu服务器
虚拟机的终端中输入ifconfig,查看地址。
找到下载的程序,双击打开。
建立SSH。
建立完成后,输入用户名和密码,进行登录。用户名一定小写!!!
登录后,在这个界面输入“指令”,等于在虚拟机终端输入“指令”。
输入exit
或者使用快捷键ctrl+d,logout SSH,然后关闭即可。
第四部分 samba搭建
需要在gongjin
文件夹下建立tspi
文件夹,然后将tspi
文件夹映射到windows盘符下。
在home目录下,输入mkdir tspi
建立文件夹。
一、为什么使用samba?
就是为了把虚拟机ubuntu中的文件目录映射到windows盘符下,这样你就可以和访问windows盘符目录一样去访问ubuntu系统里面的内容。
二、安装samba
虚拟机的终端中,依次输入下面的指令
sudo apt-get install samba
sudo apt-get install smbclient
安装完成后,查看samba的版本,大写V
samba -V
前面两步结果很长,不再展示。只显示最终结果。
三、配置samba
虚拟机的终端中,依次输入下面的指令
sudo vi /etc/samba/smb.conf
其中的“vi”是vi编辑器,和vim编辑器类似,进入后是命令模式,方向键移动光标,找到插入的位置,按“i”进入插入模式,再按shift+insert可粘贴文本
然后按esc由插入模式进入命令模式
再输入“:wq”,保存并退出
可以使用“sudo apt-get install vim
”安装vim
再使用sudo vim /etc/samba/smb.conf
,可以使用vim配置samba。
(注意vim后有个空格)
写入配置(注意vi编辑器的操作方法)
[EX_DISK_A]
comment = share folder
browseable = yes
path = /home/gongjin/tspi
valid users = gongjin, gongjin
write list = gongjin, gongjin
inherit owner = yes
browsable = yes
admin users = gongjin, gongjin
public = yes
writable = yes
create mask = 0755
read only = No
directory mode = 0755
合适的位置写入即可,写入完成后输入:wq
退出。
需要注意!!!
在tspi
文件夹下输入pwd
获得文件夹的路径。
路径下的文件夹应该存在。
用户名等应该为自己的用户名。
设置用户远程访问密码
gongjin为用户名
sudo smbpasswd -a gongjin
输入后提示输入密码
这里输入“a”作为密码。
上面命令中的“-a”不是密码。
输入下面命令,进行重启samba
sudo service smbd restart
输入后的结果为
四、映射到windows
当电脑换了网络,例如从家里去到了学校,samba和ssh还是之前的网络地址,所以电脑换了网络后,samba和ssh就无法连接。
samba:可以看到上面的文件并不会因网络地址改变后收到影响。所以删除原来的网络驱动器(盘符)(也可以不删),ifconfig
查看新的网络地址,用新的网络地址重新映射盘符,即可。
ssh:使用新的网络地址,新建session,即可。
在科技的时候,办公室没网了,将自己的网线从路由器拔下,直插到墙上的网线接口
查看虚拟机ifconfig,地址变为10.20.16.81
电脑网线插路由器时,地址为192.168.10.1,这种格式的
查了一下192与10地址的区别:
1、不同的IP地址类别:
10的开头的IP地址属于10.X.X.X是A类地址中的私有地址(所谓的私有地址是互联网上未使用但在局域网中使用的地址。192的开头是C类地址中的私有地址:192.168.X.X是私有地址。
2、IP号码的范围不同:
A类专用地址范围:10.0.0.0-10.255.255.255,默认子网掩码:255.0.0.0,共16581375个地址。
C类专用地址范围:192.168.0.0-192.168.255.255,默认子网掩码:255.255.0.0,共65,025个地址。自我感觉,A类地址下面有很多C类地址,他们之间有个从属关系。
Windows按键+R弹出对话框,输入\加ip地址
确定后,会弹出下图。输入账号密码后点击确定。
出现下图,说明已经将tspi
文件夹映射到下图文件夹中。
再将下图文件夹映射到“盘符”中。在文件夹上方右键,选择“映射到网络驱动器”。
映射完成。
双击打开,可以查看虚拟机中的tspi
文件夹。
可以用VScode打开文件夹中的程序文件,更方便修改。
即:可以在宿主机中,修改虚拟机的文件。
不使用时,可以在盘符上右键,断开连接!!!
可以在盘符和虚拟机上分别互相建立文件夹进行验证!
注:
宿主机关机后,重启ubuntu,samba是开启的,但是无法进入盘符。
暂时没找到原因
如果出现此情况,可以在盘符上右键,断开连接,再重新执行四、映射到windows。
五、samba启动、停止、重启、查看状态
samba启动:
sudo service smbd start
samba停止:
sudo service smbd stop
samba重启:
sudo service smbd restart
samba查看状态:
sudo service smbd status
第五部分 SDK编译
很多同学有疑问为什么要编译SDK,编译SDK看着挺麻烦的,不编译行不行?
这个没有标准答案,如果你只想下载别人编译好的固件并且做一些应用层的开发那可以不用编译SDK。
那如果你想自己去适配一些驱动,比如在内核中加入CH340驱动,或者点亮一款新的屏幕,又或者你想优化或者定制属于自己的东西,甚至制作一款自己的板子这都离不开SDK编译。
SDK编译并不难,大家常见的一般也都是环境问题,跟着教程一步一步来不会有太大问题。
一、环境
电脑环境
虚拟机环境
二、原理图讲解(主要是电源域)
三、编译Linux SDK(repo版本)
这里演示repo版本的。repo主要是用来管理git仓库的,有了repo你修改代码就会有记录,但是同样的也会比非repo版本占用空间大上一半。
repo是管理git的工具。
1、下载SDK
需要下载的文件有四个:
- 带repo版本的SDK:
tspi_linux_sdk_repo_20240131.tar.gz
- 带repo版本的SDK校验文件:
tspi_linux_sdk_repo_20240131_md5sum.txt
- buildroot相关库(如果你的网络比较差很有可能编译的时候自动下载失败报错,所以我提供了一个下载好的,直接代替可以避免错误):
buildroot_dl_4c7c9df616fb.tar.gz
- buildroot相关库的校验文件:
buildroot_dl_4c7c9df616fb_md5sum.txt
选择要下载的文件:
找到你samba映射的盘符,我这里映射到x盘,并且命名为ex_disk_a。在这个盘下面我新建了一个名为linux的目录来保存SDK相关文件。
linux文件夹建立完成后,直接通过samba,将四个文件移动到该文件夹下。
移动完成后:
2、校验
校验的目的是为了防止下载过程中出现的错误,用md5sum 查看下载的SDK的md5值:a30f1d0fdb97ca994a82689fa26ba429
使用md5sum命令,输入md5sum tspi_linux_sdk_repo_20240131.tar.gz
查看tspi_linux_sdk_repo_20240131.tar.gz
文件的校验码。
再使用cat命令,查看tspi_linux_sdk_repo_20240131_md5sum.txt
中保存对策校验码。
如果一样,则证明下载的包没有损坏。
buildroot_dl_4c7c9df616fb.tar.gz
文件的校验和上面也是一样的操作。
3、解压
前提准备
在tspi_linux_repo_sdk
的文件夹下,运行下面命令,进行解压,注意这个命令跟据电脑配置情况不同耗时不同,几分钟到个把小时不等。
tar -xvzf tspi_linux_sdk_repo_20240131.tar.gz
sdk解压出来以后是一个.repo文件,.
开头的文件会隐藏想要查看需要用ls --all
命令。
在ssh中查看为
在samba中查看为
再将repo移回到上级目录,可以使用samba移动,或者mv命令移动。
4、同步代码
解压完成后只有.repo目录我们还需要通过repo命令把代码同步出来,运行repo命令需要我们ubuntu安装有git和python否则会报错。
- 更新软件包
sudo apt-get update
- 安装git
sudo apt-get install git -y
- 安装repo
sudo apt install repo -y
- 安装python2
sudo apt-get install python2.7
- 安装python3
sudo apt-get install python3
- 设置 python2.7
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
- 设置 python3.6
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2
- 切换
sudo update-alternatives --config python
同步linux代码时,切换到python2.7
$ sudo update-alternatives --config python
There are 2 choices for the alternative python (providing /usr/bin/python).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/python3.6 2 auto mode
1 /usr/bin/python2.7 1 manual mode
2 /usr/bin/python3.6 2 manual mode
Press <enter> to keep the current choice[*], or type selection number: 1
可以录制宏来快速切换python的版本。
将repo的代码同步出来。(本节关键步骤)
.repo/repo/repo sync -l -j88
结果
代码同步成功后,会多出来许多关于代码的文件夹,ls --all
查看
用samba查看同步代码成功后的文件夹,共十八项(可以与sdk编译后的文件夹目录对比)
编译builtroot时,下载东西,会有404报错。
也就是前面我们有提到,如果你的的网络不好,可能会有buildroot的库下载失败报错的问题(需要魔法),所以我们这里直接提供了下载好的库直接代替即可。
代替方法如下:>即,解压buildroot_dl_4c7c9df616fb.tar.gz
后会得到一个build
文件夹,将这个文件夹放到与“.repo
”文件夹并列。
同步代码完成后,为了防止buildroot的库下载失败报错的问题,将buildroot_dl_4c7c9df616fb.tar.gz
文件夹解压,得到buildroot/dl/(需要下载的库文件)
,使用samba,将buildroot文件夹移动到tspi_linux_repo_sdk
文件夹下(win下同名文件夹会复写)。
即用解压后的buildroot
去复写tspi_linux_repo_sdk
下的buildroot
。
或者说,解压后的“dl”文件夹,移动到tspi_linux_repo_sdk
下的buildroot
里面。
查看tspi_linux_repo_sdk
-buildroot
-dl
目录。
5、安装编译环境
sudo apt-get install git ssh make gcc libssl-dev liblz4-tool expect \
g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \
qemu-user-static live-build bison flex fakeroot cmake gcc-multilib \
g++-multilib unzip device-tree-compiler ncurses-dev
6、泰山派板级配置
泰山派SDK板级配置,选3. BoardConfig-rk3566-tspi-v10.mk
- 方法一:
./build.sh device/rockchip/rk356x/BoardConfig-rk3566-tspi-v10.mk
运行如下:
- 方法二:
./build.sh lunch
运行命令选择BoardConfig-rk3566-tspi-v10.mk,这里序列号是3,所以我们选择3并回车。
- 查看配置是否生效
运行后可以看到配置文件正是tspi,证明配置生效。
7、编译buildroot系统(!!!!)
全编译
全编译时间大约一个多小时的时间。
全编译就是自动化执行每个单独编译
所以具体结果,请查看单独编译部分
运行下面的代码,选择buildrot操作系统,注意每次关闭窗口以后要重新运行.
export RK_ROOTFS_SYSTEM=buildroot
运行自动全编译命令,注意:只编译(u-Boot,kernel,Rootfs,Recovery)编译完成以后需要再执⾏./mkfirmware.sh 进⾏固件打包,与./build.sh updateimg生成镜像,很多小伙伴出现编译完成但烧录镜像不对都是因为没有执行这两个命令导致的。
./build.sh all
第一次编译kernel时,需要根据电路设计,确定电源。
电源选择,选择不对会编译报错,这里大家记住除了VCCIO4和6选1.8V其他都选3V3,如果没有弹电源选择框则需要安装sudo apt install whiptail
后在重新编译。
全编译成功,如果你中途出现了报错请检查虚拟机是否按照教程搭建,环境安装是否有遗漏。
注:这里可以做一个编译前后文件夹变化的对比
注:编译完成后,在rockdev文件夹下,只有三个文件,如下图
然后需要执行固件打包命令,执行完成后,rockdev会变为十个文件(分散镜像等文件),如下图
再执行打包镜像命令,生成一个镜像,如下图
进⾏固件打包
./mkfirmware.sh
固件打包完成
查看时间如果和你当前时间差不多那么就证明固件打包成功(分散镜像)
下载固件
在win10中打开RKDevTool.exe工具,下载配置文件:
打开烧录软件
右键导入配置文件
导入配置文件后
然后将路径改为samba的rockdev中各文件的路径。(这里是十个文件,正好rockdev中也是十个文件)
接着操作按住泰山派REC按键不松,轻触一下RST按键等待进入Loader模式后松开REC按键,当工具发现一个LOADER设备后点击“执行”升级(第一部分中“三、如何烧录固件”的操作)。
我们上面打包的固件,如果要分享给别人非常麻烦,烧录的时候还需要加载配置文件,而且还是零散的,所以我们可以把他们打包成一个镜像。注意:执行这么命令前需要保证固件打包的是最新的,否则先执行./mkfirmware.sh
打包固件命令。再执行“打包镜像”命令。
./build.sh updateimg
成功生成镜像,结果如下。
samba查看生成的完整镜像。
下载固件(完整镜像)
在win10中打开RKDevTool.exe工具,选择升级固件,并把路径改成上面文件路径samba路径,接着操作按住泰山派REC按键不松,轻触一下RST按键等待进入Loader模式后松开REC按键,当工具发现一个LOADER设备后点击执行升级。
下载完成后等待一会,如果连接HDMI屏幕,此时HDMI会有视频画面输出,恭喜你至此就成功的编译和下载了buildroot系统。
单独编译
单独编译完成后,可以使用烧录工具,单独烧录。
u-boot编译
U-Boot编译命令
./build.sh uboot
查看U-Boot详细编译命令
./build.sh -h uboot
开始编译
编译完成
kernel编译
Kernel编译命令
./build.sh kernel
查看Kernel详细编译命令
./build.sh -h kernel
编译开始(编译Kernel时,需要确定电源)
编译完成
buildroot编译
Rootfs 编译
进⼊⼯程⽬录根⽬录执⾏以下命令⾃动完成 Rootfs 的编译及打包:
./build.sh rootfs
编译后在 Buildroot ⽬录 output/rockchip_rk3566/images下⽣成 rootfs.ext4。
开始编译
编译结束
模块编译
⽐如 qplayer 模块,常⽤相关编译命令如下:
- 编译 qplayer
SDK$make qplayer
- 重编 qplayer
SDK$make qplayer-rebuild
- 删除 qplayer
SDK$make qplayer-dirclean
或者
SDK$rm -rf /buildroot/output/rockchip_rk3566/build/qlayer-1.0
Recovery编译命令
Recovery编译命令
./build.sh recovery
查看Recovery详细编译命令
./build.sh -h recovery
注:Recovery是⾮必需的功能,有些板级配置不会设置
开始编译
编译结束
8、编译debian系统(只搬运教程,未测试)
选择debian 注意每次关闭窗口以后要重新运行。
export RK_ROOTFS_SYSTEM=debian
因为我们前面编译buildroot的时候已经全编译过了,那我们接下来就只单独编译debian!!!
./build.sh debian
也可以执行全编译
./build.sh all # 只编译模块代码(u-Boot,kernel,Rootfs,Recovery)
# 需要再执⾏./mkfirmware.sh 进⾏固件打包
注:这里不知道buildroot和debian的关系。
弹窗提示输入你的root密码输入回车即可
报错,这个问题,我们看报错应该是lb_config中相关配置文件问题,这里可以看到链接都是国外镜像源需要魔法,所以我们把这个链接改成国内镜像源。
修改方法,我们之前都是使用vim去修改文件相信对这种方法大家已经很熟悉了,既然我们前面映射了samba那我们就直接在win10打开文件目录修改
我们这里编译64位的所以进入buster-desktop-arm64
目录,打开下面的文件,并修改。
把下面内容代替下图红框中的位置
--mirror-bootstrap "http://mirrors.163/debian" \
--mirror-chroot "http://mirrors.163/debian" \
--mirror-chroot-security "http://mirrors.163/debian-security" \
--mirror-binary "http://mirrors.163/debian" \
--mirror-binary-security "http://mirrors.163/debian-security" \
代替后的效果
再重新执行编译debian的命令
./build.sh debian
输入root用户密码
恭喜你编译成功
进⾏固件打包
./mkfirmware.sh
得到分散镜像,此时,可按buildroot下载分散镜像的方法下载。
执行下面的命令,打包为完整的镜像。
注意:执行这么命令前需要保证固件打包的是最新的,否则先./mkfirmware.sh
在执行此命令
./build.sh updateimg
成功生成镜像。
可以看到目录下比之前多了一个update.img文件,而且看时间也是最新的。
此时,可按buildroot下载完整镜像(固件)的方法下载。
下载完成等一会就hdmi会输出debian界面,系统的账号和密码都是linaro
,看到下面界面那么恭喜你已经成功的编译并下载了debian。
9、编译ubuntu系统(未)
10、单独编译kernel(只适合带emmc版本)
四、编译Android11 SDK(repo版本)
这里我们演示repo版本的,很多同学就会有疑问,repo是啥?为什么要用这个版本呢?repo主要是用来管理git仓库的,有了repo你修改代码就会有记录,但是同样的也会比非repo版本占用空间大上一半。
1、下载SDK
需要下载的文件:
- 带repo版本的SDK
tspi_android_sdk_repo_20240202.tar.gz
- 带repo版本的SDK校验文件
tspi_android_sdk_repo_20240202_md5sum.txt
下载完成后,使用samba,将文件移动到tspi/andriod11文件夹下。
2、校验
校验的目的是为了防止下载过程中出现的错误,用md5sum 查看下载的SDK的md5值:16936e9c6074ad753d50655ae53382ed
。
md5sum tspi_android_sdk_repo_20240202.tar.gz
16936e9c6074ad753d50655ae53382ed tspi_android_sdk_repo_20240202.tar.gz
再看一下我们给的mdk值看这里两个值是否一样,如果一样则正确
cat tspi_android_sdk_repo_20240202_md5sum.txt
16936e9c6074ad753d50655ae53382ed tspi_android_sdk_repo_20240202.tar.gz
最终效果
3、解压
跟编译linux时,进行同样的操作,新建一个tspi_android_repo_sdk
文件夹,将sdk的压缩文件移入到这个文件夹下进行解压,解压完成后,将压缩文件再移动出来,或者将压缩文件删除,节约空间。这里为了和编译linux时保持一致,选择将压缩文件移动出来,防止编译出错时还需要将压缩文件重新移入的问题。
新建
tspi_android_repo_sdk
文件夹后,在这个文件夹下解压两次均出错。
所以又在linux
文件夹下解压,一次正确,后续就在linux
这个文件夹下操作。
在tspi_android_repo_sdk
文件夹下执行下面的命令,开始解压
tar -xzf tspi_android_sdk_repo_20240202.tar.gz
解压命令中,不加v,不看解压日志
也可通过samba,使用电脑的压缩软件解压。
解压完成,大约花费20分钟。(KJ224电脑)
(笔记本解压 很快完成)
同样的,sdk解压出来以后是一个.repo
文件,.
开头的文件会隐藏想要查看需要用ls --all
命令。
使用samba查看解压后的文件。
4、同步代码
解压完成后只有.repo目录我们还需要通过repo命令把代码同步出来,运行repo命令需要我们ubuntu安装有git和python否则会报错。
更新软件包(前面安装过就不用再安装了)
sudo apt-get update
安装git(前面安装过就不用再安装了)
sudo apt-get install git -y
安装repo(前面安装过就不用再安装了)
sudo apt install repo -y
安装python2(前面安装过就不用再安装了)
sudo apt-get install python2.7
安装python3(前面安装过就不用再安装了)
sudo apt-get install python3
python版本切换设置,为什么要切换呢?因为有时候我们会用python2有时候会用python3(前面做过了就不用再重复了)
直接切换命令
$设置 python2.7
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
$设置 python3.6
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2
切换后,自己选择切换版本命令
sudo update-alternatives --config python
同步android代码时,切换到python2.7
$ sudo update-alternatives --config python
There are 2 choices for the alternative python (providing /usr/bin/python).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/python3.6 2 auto mode
1 /usr/bin/python2.7 1 manual mode
2 /usr/bin/python3.6 2 manual mode
Press <enter> to keep the current choice[*], or type selection number: 2
执行同步代码的命令
.repo/repo/repo sync -l -j88
同步成功,结果如下图所示
这是在
tspi_android_repo_sdk
文件夹,同步代码出现的错误。
ls查看文件夹
切换到开发板分支!!!
cd kernel/ && git clean -xdf && cd .. && repo forall -c "git checkout lckfb-tspi-v1.0.0"
命令解析,首先到cd kernel
目录下git clean -xdf
清除掉差异否则会同步失败,这个问题下一版解决,然后cd ..
退回到SDK目录下。
repo forall -c "git checkout lckfb-tspi-v1.0.0"
通过repo命令切换到泰山派分支.
&&代表命令组合,分开执行也行,这里选择分开执行
查看执行过程,如下图:
5、安装编译环境
将下面的命令输入到终端,运行即可。
sudo apt-get update && sudo apt-get 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
安装成功
6、全编译Android11(编译大概5个小时)
这个命令会编译boot、kernel、android
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 -j16 && cd .. && source build/envsetup.sh && lunch rk3566_tspi-userdebug && make installclean -j16 && make -j16 && ./mkimage.sh
电源选择,选择不对会编译报错,这里大家记住除了VCCIO4和6选1.8V其他都选3V3,如果没有弹电源选择框则需要安装sudo apt install whiptail
后在重新编译。
恭喜你编译成功,我的电脑i7-9700,32G花费4小时26分钟(教程用时)(第一次用时会比较久,后面不make clean
的话,全编译就几分钟)
make clean
就是清除所有的编译文件,一切重新开始
如果你中途出现了报错请检查虚拟机是否按照教程搭建,环境安装是否有遗漏。
查看结果:
KJ224电脑用时5个小时
自己笔记本进行安卓全编译,32G 11代i5 11400H
编译时间 3:21
进⾏固件打包
./mkimage.sh
看一下时间是否和你编译时间接近,确保打包成功
ls rockdev/Image-rk3566_tspi/ -l
查看结果
samba查看结果
下载固件,在win10中打开RKDevTool.exe工具,下载配置文件:
导入配置文件,并把路径改成上面文件路径samba路径,接着操作按住泰山派REC按键不松,轻触一下RST按键等待进入Loader模式后松开REC按键,当工具发现一个LOADER设备后点击执行升级。
我们上面打包的固件,如果要分享给别人非常麻烦,烧录的时候还需要加载配置文件,而且还是零散的,所以我们可以把他们打包成一个镜像。注意:执行这么命令前需要保证固件打包的是最新的,否则先./mkimage.sh
在执行此命令
./build.sh -u
成功生成镜像
可以看到目录下比之前多了一个update.img
文件,而且看时间也是最新的,之前有小伙伴没有执行上面命令就直接烧录update.img
,出现不是自己编译的固件情况,这里再次强调,需要先执行./mkfirmware.sh
再执行./build.sh updateimg
并且确保时间是最新的。
查看结果:
得到上面的信息,证明打包为一个镜像成功!!!
下载镜像,在win10中打开RKDevTool.exe工具,选择升级固件,并把路径改成上面文件路径samba路径,接着操作按住泰山派REC按键不松,轻触一下RST按键等待进入Loader模式后松开REC按键,当工具发现一个LOADER设备后点击执行升级。
这里不再演示。
编译完成后,进行打包固件。
固件打包完成后就可以下载分散镜像
打包镜像:就是将分散镜像打包为一个镜像。
下载完成后等待一会HDMI会有视频画面输出,恭喜你至此就成功的编译和下载了android系统。
7、单独编译kernel(只适合带emmc版本)
前面我们都是走的全编译,因为需要编译和下载很多东西,所以非常慢,而且占用空间也很大。
如果你只是单纯的修改一些配置、驱动或者设备树(新手同学可以理解为内核的xml配置文件,后面我们会去讲),单独编译和烧录内核就行,这样速度快有利于调试。
编译命令
在kernel目录下编译
make ARCH=arm64 BOOT_IMG=../rockdev/Image-rk3566_tspi/boot.img tspi-rk3566-user-v10.img -j72
编译内核kernel,会生成
boot.img
,看看还有哪些新生成的镜像。
第一次全编译完成后,再单独编译内核,就很快了。
编译完成
然后单独烧录boot.img固件即可!!!
导入Android_Tspi_Kernel.cfg配置文件,勾选boot选项其他去掉,再把boot选项路径切换到kernel下的boot.img。
具体步骤跟上面一样。
五、单独编译“驱动模块”
适合于Android和linux,前提是你完成了上面的全编译,并且在烧录成功固件的基础上进行的。
我们为了改一个驱动,去编译kernel,然后再下载,时间还是很慢的。
如果单纯只修改了驱动,我们完全可以只编译“驱动模块”,然后放到开发板中去加载。
这里以一个my_touch驱动为列
1、配置Makefile
驱动中的Makefile文件,如果obj-y,就是编译到内核。如果obj-m,就是编译到模块“.ko
文件”。
这里一般不会直接写出来,都是有由一个config变量来确定。
例如,我们需要把my_touch驱动,编译成模块,所以要将my_touch目录下的Makefile中的相应代码改成obj-m。
#如果编译成.ko的话就选obj-m,如果编译到内核就obj-y
obj-m += my_touch.o
然后,单独编译“驱动”,生成my_touch.ko
文件。
在kernel目录下输入命令。
kernel$ make ARCH=arm64 -C . M=./drivers/input/touchscreen/my_touch
make
命令用于构建 Linux 内核或内核模块。ARCH=arm64
指定了目标架构为 64 位 ARM 架构-C .
指定了内核源代码目录为当前目录M=./drivers/input/touchscreen/my_touch/
指定了我们触摸,也就是要构建的内核模块所在的相对路径为./drivers/input/touchscreen/my_touch/
。
触摸驱动一节中,也有相应的内容
2、加载my_touch.ko
通过adb把my_touch.ko
push到泰山派里面去
注意下面的路径
adb root && adb remount && adb push Z:\tspi\Android11_20231007\PublicVersion\kernel\drivers\input\touchscreen\my_touch\my_touch.ko /vendor/lib/modules
adb root
: 这个命令会尝试获取 Android 设备的 root 权限。在有些设备上,访问/vendor/lib/modules
目录需要 root 权限。adb remount
: 这个命令会重新挂载文件系统,通常用于将文件系统从只读模式切换为可读写模式。因为你要往/vendor/lib/modules
目录写入文件,所以需要将其挂载为可读写。adb push Z:\tspi\Android11_20231007\PublicVersion\kernel\drivers\input\touchscreen\my_touch\my_touch.ko /vendor/lib/modules
: 这个命令的格式是adb push <本地路径> <目标路径>
,它会将本地路径下的文件推送到目标路径。在这里,my_touch.ko
是你要推送的文件,它位于Z:\tspi\Android11_20231007\PublicVersion\kernel\drivers\input\touchscreen\my_touch\
这个本地路径下。它将被推送到 Android 设备的/vendor/lib/modules
目录中。
push后,需要在泰山派中需要手动“安装”驱动
如果是-y,驱动自动被安装好。
下面adb进入tspi 的shell,安装驱动
adb进入shell
安装驱动
rk3566_tspi:/ # insmod /vendor/lib/modules/my_touch.ko
查看驱动是否安装成功
rk3566_tspi:/ # lsmod
Module Size Used by
my_touch 16384 0
bcmdhd 1175552 0
结果
第六部分 docker编译(还是不太理解)
在我们编译泰山派SDK时候,可能会因为大家的电脑环境不同导致编译失败,如果使用docker就能很好的避免环境不同意带来的编译问题,极大提供高编译成功率,这种方法也是我们主推的编译方法,下面是我测试过并长期使用的docker环境,建议大家编译泰山派SDK时候使用此方法。
一、Docker 的安装
1、卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
2、使用存储库安装
更新 apt 包索引并安装相关软件包以允许 apt 通过 HTTPS 使用 docker 存储库:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
添加 Docker 的官方 GPG 密钥:
(一起用或分开用都行)
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
出现不安全的提示
设置存储库:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker/linux/ubuntu $(lsb_release -cs) stable" | sudo tee -a /etc/apt/sources.list.d/docker.list > /dev/null
(运行命令后没有反应)
3、安装 Docker engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
4、验证安装完成
只用第一行
sudo docker -v
# 打印出版本号
Docker version 24.0.2, build cb74dfc
查看版本号成功。
二、创建镜像
当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
- 1、从已经创建的容器中更新镜像,并且提交这个镜像
- 2、使用 Dockerfile 指令来创建一个新的镜像
下面使用dockfile新建镜像
首先建一个文件夹,如图
通过vim新建文件
没有权限的话,使用sudo
vim dockerfile
添加下面的内容到dockerfile中
下面这个文件暂时不要修改,还没有能力修改。
# 设置基础镜像为Ubuntu 18.04
FROM ubuntu:18.04
# 设置作者信息
MAINTAINER lckfb "service@lckfb"
# 设置环境变量,用于非交互式安装
ENV DEBIAN_FRONTEND=noninteractive
# 备份源列表文件
RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
# 将源列表中的 http://.*ubuntu 替换为 http://repo.huaweicloud
RUN sed -i 's@http://.*ubuntu@http://repo.huaweicloud@g' /etc/apt/sources.list
# 更新包列表
RUN apt update
# 安装基本的编译工具和依赖
RUN apt install -y build-essential crossbuild-essential-arm64 \
bash-completion vim sudo locales time rsync bc python
# 安装其他依赖包,这里编译android11sdk需要的环境
RUN apt install -y repo git ssh libssl-dev liblz4-tool lib32stdc++6 \
expect patchelf chrpath gawk texinfo diffstat binfmt-support \
qemu-user-static live-build bison flex fakeroot cmake \
unzip device-tree-compiler python-pip ncurses-dev python-pyelftools \
subversion asciidoc w3m dblatex graphviz python-matplotlib cpio \
libparse-yapp-perl default-jre patchutils swig expect-dev u-boot-tools
RUN apt install -y bear
# 再次更新包列表并安装任何未安装的依赖
RUN apt update && apt install -y -f
# 生成本地化语言支持
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
# 创建开发板用户
RUN useradd -c 'lckfb user' -m -d /home/lckfb -s /bin/bash lckfb
# sudo免密登录
RUN sed -i -e '/\%sudo/ c \%sudo ALL=(ALL) NOPASSWD: ALL' /etc/sudoers
RUN usermod -a -G sudo lckfb
USER lckfb
#设置docker工作目录为/home/lckfb
WORKDIR /home/lckfb
#容器使用这个内核方法
#docker run --privileged --mount type=bind,source=/home/LCKFB_RK3566/ROCKCHIP_ANDROID11.0_SDK_RELEASE/ROCKCHIP_ANDROID11.0_SDK_RELEASE,target=/home/lckfb/android11 --name="lckfb_android11_sdk" -h lckfb -it lckfb_android11_sdk_cmp
创建镜像
在 Dockerfile 文件的存放目录下,执行构建动作(没有权限时,使用sudo)
docker build -t lckfb_xly_01 .
lckfb_xly_01是镜像名称,可随意更改,注意命令最后有一个‘.
’
此过程需要一段时间,请耐心等待
如果创建镜像时候出现了命令错误可以通过先运行下面进行测试
docker run --rm -it Ubuntu 18.04 bash
- docker run 是用于创建并运行容器的命令。
- –rm 参数指示 Docker 在容器停止后自动删除该容器。这样可以确保不会在系统中留下不再使用的停止状态容器。
- -it 参数结合了 -i(交互式)和 -t(终端)两个选项,使得容器中的命令可以接收终端输入并显示输出。
- <镜像名称或ID> 是指要基于哪个镜像创建容器。您可以提供镜像的名称或ID来唯一标识一个镜像。
- <要运行的命令> 是您希望在容器中运行的命令或指令。
查看镜像
输入(没有权限时,使用sudo)
docker images
镜像存放位置
>
如何删除镜像docker
使用docker images
查看docker
使用docker rmi <镜像ID或镜像名>
删除镜像。
应该删除不彻底,文件啥的还在。
三、基于镜像创建容器
使用下面命令,创建容器。
docker run --privileged --mount type=bind,source=/home/gongjin/tspi/Linux/tspi_linux_repo_sdk,target=/home/lckfb --name="lckfb_android11_sdk" -h lckfb -it lckfb_xly_01
注意!!!
有需要修改的地方。
- –privileged:在容器内启用特权模式,允许容器内的进程访问所有主机设备。
- –mount type=bind,source=/home/gongjin/tspi/Linux/tspi_linux_repo_sdk,target=/home/lckfb:创建绑定类型的挂载点,将宿主机上的/home/gongjin/tspi/Linux/tspi_linux_repo_sdk目录挂载到容器内的/home/lckfb目录。这使得容器内的应用程序可以访问并操作宿主机上的该目录。
- –name=“lckfb_android11_sdk”:为容器指定一个名称,这样可以在后续的Docker命令中使用该名称引用容器。
- -h gongjin:设置容器的主机名为gongjin。
- -it:以交互式和终端的方式运行容器。
- lckfb_xly_01:使用名为lckfb_xly_01的镜像来创建容器。
运行后,进入容器
ls命令查看文件夹,会发现容器中的文件夹和tspi_linux_repo_sdk
的文件夹一样。
(因为这里将目录修改到了tspi_linux_repo_sdk
)
dockerfile文件修改,但修改不正确的话,进入后,ls会没有文件!!!!
四、列出所有的容器
docker ps -a 包括正在运行的和已经停止的容器
结果
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7258412811df lckfb_android11_sdk_cmp "/bin/bash" 29 minutes ago Exited (0) 26 minutes ago lckfb_android11_sdk
- CONTAINER ID:容器的唯一ID。
- IMAGE:容器所使用的镜像。
- COMMAND:容器启动时运行的命令。
- CREATED:容器的创建时间。
- STATUS:容器的当前状态(正在运行、已停止等)。
- PORTS:容器的端口映射信息。
- NAMES:容器的名称。
五、启动容器
docker start lckfb_android11_sdk #启动容器
docker attach lckfb_android11_sdk #附加到正在运行的名为lckfb_android11_sdk的容器的终端上,以便与容器进行交互
六、退出容器
exit
最后部分:一些其他问题
一、增强服务
安装增强工具的目的主要有三个:
-
实现虚拟机(Ubuntu)和主机(Windows)的文件共享。
-
可以使用全屏模式~即启用 vbox 无缝模式(使用主机io输出)。
-
实现主机与虚拟机双向的复制粘贴。
具体知道增强功能与这三个有关就行了。
注:安装增强功能后,会导致ubuntu开机很慢。
使用以下命令查看占用开机时长的服务
systemd-analyze blame
注:开机时间从0毫秒往上累加,总共开机时间为5min3.11s
看下图,可知,只有增强服务开机时间最长。
使用sudo systemctl disable <services>
禁用服务。
sudo systemctl disable plymouth-quit-wait.service
这个Plymouth 负责 Ubuntu 和其他发行版中在登录页面出现之前的引导页面,网络管理器负责互联网连接,可以关闭它来加快启动时间,且不影响正常使用。(这个不用禁用)
sudo systemctl disable vboxadd.service
这个是禁用增强功能。(同理,enable可以开启)
经测试,禁用增强服务后,依然可以共享粘贴板。
如果不能共享。让增强服务开机后自动启动,使用命令sudo systemctl start <services>
即:sudo systemctl start vboxadd.service
二、输入命令后,最下方显示lines 1-14/14(end)
查看“开机占用时间”以及“查看samba状态”时,会出现
以“开机占用时间”为例
这是因为系统启用了分页显示。
类似于less程序,这时我们可以使用空格键向下翻一页,使用B键向上翻一页,也可以使用方向键上下左右翻页。
按Q键退出。
版权声明:本文标题:第一节:环境搭建与SDK编译 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1725938140h895888.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论