===== NK-R36S0A1 ===== ==== 主板框架图 ==== {{:2c8b3dc2485d64719312dc94d1122db.png?600 |}} {{::微信图片_20230428093645.jpg?400 |}} {{:微信图片_20230428093651.jpg?400 |}} {{::微信图片_20230428093657.jpg?400 |}} ==== 接口定义 ==== {{page>:template:R39S2_hw}} === 插针pin定义 === {{page>:template:R39S2p_hw_pin}} === Jump_sel === {{page>:template:R39S2_hw_jump}} ==== 硬件特性 ==== {{page>:template:3568_hwspec}} ==== 快速上手 ==== === 系统烧录 === 1、下载烧录工具: 请务必先安装驱动,烧录工具链接含有驱动DriverAssitant压缩包,解压后点击DriverInstall.exe安装驱动 {{:arm:rk3399:3399-shaolu.png?600|}} 2、开始烧录: 将数据线一端与主板OTG连接,另一端连接电脑。注意烧录前,需关闭电源,开电源时按住boot_key按键进行烧入。 {{:arm:rk3399:linux:r36s0_1.png?600|}} 打开压缩包中开发工具 » 升级固件 » 点击固件并选择好固件 » 点升级开始烧录 {{:arm:rk3399:linux:r36s0_2.png?600|}} 烧录过程中的状态,会有进度显示 {{:arm:rk3399:linux:r36s0_3.png?600|}} 更换系统平台(例如安卓切换到Linux)时,可能出现无法烧录的情况,此时打开开发工具 » 高级功能 » 点击进入Maskrom切换烧录模式后烧录系统 {{:arm:rk3399:3399-kaishishaolu2.png?600|}} 3、完成烧录: 烧录过程不需要任何操作,烧录成功后右框会显示设备自动重启,烧录完成。 {{:arm:rk3399:linux:r36s0_4.png?600|}} === Fwbackups备份软件安装 === {{page>:template:R39S2p_hw_jx}} === 生成rootfs镜像 === {{page>:template:R39S2p_hw_fw}} === Debug串口调试 === 1、通过串口进入系统后台,需要利用板子的Debug接口,接口位置和定义如图: {{:arm:rk3399:linux:36s0_debug3.png?600|}} * 接口只需要用到3个引脚,TX、RX、GND 2、需要用到串口小板工具 A部分需要接入TX、RX、GND B部分连接电脑USB口 {{:arm:rk3399:android:ser-3.png?600|}} 3、硬件部分连接效果图 {{:arm:rk3399:linux:r36s0_debug2.png?600|}} 4、在电脑的设备管理器→端口 中看有没有串口信息 {{:arm:rk3399:android:ser-4.png?600|}} 5、打开Xshell新建一个会话,在连接下选择协议为SERIAL,操作如图: {{:arm:rk3399:android:ser-5.png?600|}} 6、点击串口,端口号为设备管理器看到的串口号,波特率为:1500000 {{:arm:rk3399:android:ser-6.png?600|}} 7、最后点击连接,串口进入后台 {{:arm:rk3399:linux:r36s0_debug10.png?600|}} === Android ADB === {{page>:template:temp_adb}} === Linux SSH === {{page>:template:temp_ssh}} ==== Android 使用指南 ==== === 接口功能测试 === == UART == {{page>:template:temp_android_uart}} == LAN == 1. 将网线连接到主板LAN1接口上 {{:arm:rk3399:linux:rk36s0_lan33.png?600|}} 2. 查看网卡IP地址 a)点击设置 => 网络和互联网 {{:arm:rk3568:android:ad-lan1.png?600|}} b)有线网络 {{:arm:rk3568:android:ad-lan2.png?600|}} c)查看IP地址,一般系统默认动态获取IP地址 {{:arm:rk3568:android:an-lan3.png?600|}} 3. 连接上网络后,打开浏览器浏览网页查看是否连接上网络 {{:arm:rk3568:android:an-lan4.png?600|}} 4.设置以太网静态IP地址 * 点击 上网模式 选择 静态IP {{:arm:rk3568:android:an-lan5.png?600|}} * 进行设置 {{:arm:rk3568:android:an-lan6.png?600|}} == WIFI == 1.设置 => 网络和互联网 => 点击WLAN {{:arm:rk3568:android:ad-wifi1.png?600|}} 2.点击开启 {{:arm:rk3568:android:ad-wifi2.png?600|}} 3.选择需要连接的WIFI,然后点击,输入密码 {{:arm:rk3568:android:ad-wifi3.png?600|}} {{:arm:rk3568:android:ad-wifi4.png?600|}} 4.连接成功 {{:arm:rk3568:android:ad-wifi5.png?600|}} == 4G/5G == 1.测试4G网络 a)给板子断电,接上4G模块与天线,插入5G电话卡 b)机器上电后有这个4G图标表示正常 {{:arm:rk3568:android:an-4g.png?600|}} 2.测试5G网络 a)给板子断电,插入5G电话卡,接上5G模块与一根天线,天线接在模线帽接口 状态栏右上角显示该图标,则为开启成功 {{:arm:rk3568:android:ad-5g.png?600|}} == Can == {{page>:template:temp_android_can}} == GPIO/DIO == {{:arm:rk3399:linux:36s0_gpio3.png?600|}} == Audio == {{page>:template:temp_android_audio}} == Mic == {{page>:template:temp_android_mic}} == USB == {{:arm:rk3399:linux:r36s0_usb.png?600|}} == SDCARD == {{page>:template:temp_android_sdcard}} == Bluetooth == {{page>:template:temp_android_bluetooch}} == WatchDog == {{page>:template:temp_android_watchdog}} == Key == {{page>:template:temp_android_key}} == LCD == {{page>:template:temp_android_lcd}} == PowerManager == {{page>:template:temp_android_pm}} == RTC == {{page>:template:temp_android_rtc}} === 系统基本功能设置 === {{page>:template:temp_android_system}} === 系统性能测试 === {{page>:template:temp_android_perf}} ==== Android API 使用说明 ==== {{page>:template:temp_android_api}} ==== Linux 使用指南 ==== === 接口功能测试 === == GPIO == 1.导出节点(编号为56、57、58、59) echo 56 >/sys/class/gpio/export 2. IO 控制节点都在/sys/class/gpio/ {{:arm:rk3399:linux:36s0_gpio3.png?600|}} 3. IO 对应表如下: ^ 功能 ^ 主板丝印 ^ 节点编号 ^ ^ 输入\输出 | J_GPIO1 |gpio56 | | ::: | J_GPIO2 |gpio57 | | ::: | J_GPIO3 |gpio58 | | ::: | J_GPIO4 |gpio59 | 4. IO控制方法: *输出低电平: echo 0 >/sys/class/gpio/gpio56/value *输出高电平: echo 1 >/sys/class/gpio/gpio56/value *查看输入电平: cat /sys/class/gpio/gpio56/value == UART == 1. 串口定义参考: * [[:nk-rk3399-v0c#接口定义|主板接口定义]] 2. 串口设备节点系统对应表: ^ 主板丝印 ^ 设备节点 ^ | 232_RX5\TX5 | /dev/ttyS7 | | UART0_TTL | /dev/ttyS0 | | 232_RX3\TX3 | /dev/ttyS5 | | 232_RX4\TX4 | /dev/ttyS9 | | RS485_A1\B1 | /dev/ttyS3 | | RS485_A2\B2 | /dev/ttyS4 | 3. CuTecom 测试串口,以232_RX5\TX5回环测试为例 * 参考步骤1~2短接232_RX5\TX5的 TX & RX (2~3 pin); * 双击桌面CuteCom图标,打开APP,Device选择测试端口对应的设备节点(见步骤2); * 点击Settings,设置串口参数,如下图所示: {{:arm:rk3399:linux:cutecom_1.png?600|}} * 设置好以后点击Open 打开串口,在input 文本输入框中输入字符,按回车发送数据: {{:arm:rk3399:linux:cutecom_2.png?600|}} 4. 命令行方式测试串口,同样以UART_RX5\TX5_232回环测试为例 打开终端输入如下指令接收数据: com_recv /dev/ttyS7 115200 打开另一个终端发送数据: com_send /dev/ttyS7 115200 测试结果如下: {{:arm:rk3399:linux:36s0_uart3.png?600|}} == LAN == 1. 查看网卡IP地址,系统默认都为动态获取IP地址 #ifconfig -a {{:arm:rk3399:linux:ifconfig.png?600|}} 2. 设置网卡静态IP地址 * 方法1 -- 使用图形界面工具设置 双击桌面图标Advanced Network Configuration {{:arm:rk3399:linux:network_ip1.png?600|}} {{:arm:rk3399:linux:network_ip2.png?600|}} * 方法2 -- 修改配置文件的方式: vim /etc/network/interfaces {{:arm:rk3399:linux:interfaces.png?600|}} * 修改完成后输入重启生效。 == WIFI == 1. 点击右下角网络图标,浏览可用WIFI路由: {{:arm:rk3399:linux:wifi1.png?600|}} * 输入WIFI密码,点击connect {{:arm:rk3399:linux:wifi2.png?600|}} 2. 方法2 -- 命令行连接wifi nmcli d wifi connect "SSID" password "PASSWROD" == 4G/5G == 1. 系统已带自动拨号,打开终端,输入命令4g 即可自动拨号: root@rk3399:~# 4g 2. 拨号完成后,查看IP地址: {{:arm:rk3399:linux:4g.png?600|}} 3. 打开浏览器,浏览任意网站。 {{:arm:rk3399:linux:36s0_4g11.png?600|}} 4. 5G测试方法与4G类似,输入命令5g即可自动拨号: root@rk3399:~# 5g == Can == {{page>:template:temp_linux_can}} == GPIO/DIO == 1.导出节点(编号为56、57、58、59) echo 56 >/sys/class/gpio/export 2. IO 控制节点都在/sys/class/gpio/ {{:arm:rk3399:linux:36s0_gpio3.png?600|}} 3. IO 对应表如下: ^ 功能 ^ 主板丝印 ^ 节点编号 ^ ^ 输入\输出 | J_GPIO1 |gpio56 | | ::: | J_GPIO2 |gpio57 | | ::: | J_GPIO3 |gpio58 | | ::: | J_GPIO4 |gpio59 | 4. IO控制方法: *输出低电平: echo 0 >/sys/class/gpio/gpio56/value *输出高电平: echo 1 >/sys/class/gpio/gpio56/value *查看输入电平: cat /sys/class/gpio/gpio56/value == Audio == * 将喇叭连接板子上的 SPK 端口 1. 方法① -- 使用系统自带SMPayer播放器,以及音频测试文件,可以做简单音频功能测试 {{:arm:rk3399:linux:smplayer.png?600|}} 2. 方法② -- 使用命令方式播放: aplay /nodka_test/LR_audio.wav -D hw:0,0 == Mic == * 录音测试 arecord -D hw:0,0 -d 5 -f cd -r 44100 -c 2 -t wav test.wav aplay test.wav -D hw:0,0 == USB == 1. U盘自动挂载/media/disk root@rk3399:~# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/root 15G 3.6G 10G 27% / devtmpfs 980M 0 980M 0% /dev tmpfs 981M 0 981M 0% /dev/shm tmpfs 981M 8.8M 972M 1% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 981M 0 981M 0% /sys/fs/cgroup tmpfs 197M 16K 197M 1% /run/user/0 /dev/sda1 57G 2.7G 54G 5% /media/disk == SDCARD == * SDcard 自动挂载: root@rk3399:~# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/root 15G 3.6G 10G 27% / devtmpfs 980M 0 980M 0% /dev tmpfs 981M 0 981M 0% /dev/shm tmpfs 981M 8.8M 972M 1% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 981M 0 981M 0% /sys/fs/cgroup tmpfs 197M 16K 197M 1% /run/user/0 /dev/mmcblk0p8 30G 3.8G 25G 14% /media/3699f79c-f05d-4948-89c9-04dc4b132a1f 解除挂载: umount /dev/mmcblk0p8 挂载: mount /dev/mmcblk0p8 /sdcard == Bluetooth == 1. 打开蓝牙管理器,搜索附近蓝牙设备: {{:arm:rk3399:linux:bt1.png?600|}} 2. 选中蓝牙设备,配对然后选择信任: {{:arm:rk3399:linux:bt2.png?600|}} 3. 设置蓝牙连接类型: {{:arm:rk3399:linux:bt3.png?600|}} == WatchDog == {{page>:template:temp_linux_watchdog}} == Key == 1. 输入命令evtest 查看系统下所有按键、输入设备: root@rk3399:~# evtest No device specified, trying to scan all of /dev/input/event* Available devices: /dev/input/event0: ff420030.pwm /dev/input/event1: USB Optical Wheel Mouse /dev/input/event2: SIGMACH1P USB Keyboard /dev/input/event3: rk29-keypad /dev/input/event4: SIGMACH1P USB Keyboard Select the device event number [0-4]: 2. 按照上面提示选择测试按键,如RK3399 boot按键为 /dev/input/event3: rk29-keypad 则event number 为3:按下按键会打印value 1,松开按键则会打印value 0,如下图: {{:template:key.png?600|}} 3. 自定义按键功能,配置文件为 /etc/triggerhappy/triggers.d/example.conf 如下为定义按键为reboot功能,亦为系统默认配置,用户可以根据需要自定义。 KEY_VOLUMEUP 1 reboot == LCD/Backlight == 1. 系统支持使用APP切换不同的LCD屏,输入dis命令打开APP如下图: * 选择对应的eDP/LVDS 屏分辨率,然后点击保存,系统自动重启后即可切换到指定的LCD: {{:arm:rk3399:linux:dis.png?600|}} 2. 背光亮度调节: * 方法①:点击右下角系统托盘如下图标,打开背光调节APP {{:template:backlight.png?600|}} * 方法②:控制驱动应用层接口: echo 100 > /sys/class/backlight/backlight1/brightness (注:写入数值越大亮度越大,max_brightness 为250) == PowerManager == 1. 电源管理设置: {{:template:suspend.png?600|}} {{:template:pm.png?600|}} 休眠后按POWER键唤醒 2. 电源管理功能非所有产品支持,需定制系统请联系业务窗口人员。 == RTC/Timezone == 1.查看当前系统时间: [root@rk3399:~]# date Wed Jun 8 15:54:09 CST 2022 2. 设置同步硬件时钟: [root@rk3399:/]# date -s "2022-06-08 17:01:01" Wed Jun 8 17:01:01 CST 2022 [root@rk3399:/]# hwclock -w [root@rk3399:/]# hwclock -r Wed Jun 8 17:01:09 2022 0.000000 seconds 3. 关机断电5秒以上,再开机查看系统时间是否保存: [root@rk3399:/]# date Wed Jun 8 17:02:30 CST 2022 注:系统默认为网络时间同步,以上RTC测试需要在断外网情况下测试。 4. 时区设置 * 方法① -- 修改link文件,如改为中国、上海: ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime reboot 设置其他时区只需将上面命令中的Asia/Shanghai改为对应的时区城市即可。 * 方法② -- 在图形界面依次打开首选项->时间和日期,选择时区如下图: {{:arm:rk3399:linux:timezone.png?600|}} 选择完成后关闭窗口,使用date命令查看时区变化: {{:arm:rk3399:linux:timezone1.png?600|}} == CPU == 查看CPU信息: cat /proc/cpuinfo == Memory == 查看内存容量大小: free -h == EMMC == 查看EMMC可用容量大小 df -h ==== Linux 应用编程 ==== === GPIO 应用编程 === C参考代码如下: #include #include #include #include #include #include #include static char gpio_path[100]; //设置GPIO方向、高低电平 static int gpio_config(const char *file, const char *value) { char config_path[100]; int len; int fd; sprintf(config_path, "%s/%s", gpio_path, file); if (0 > (fd = open(config_path, O_WRONLY))) { perror("open error"); return fd; } len = strlen(value); if (len != write(fd, value, len)) { perror("write error"); close(fd); return -1; } close(fd); return 0; } //获取GPIO的方向、电平 static int gpio_get(const char *file) { char get_path[100]; char buf[10]={"\0"}; int len; int fd; sprintf(get_path, "%s/%s", gpio_path, file); if (0 > (fd = open(get_path, O_RDWR))) { perror("open error"); return fd; } if ( 0 > read(fd,buf,10)) { perror("read error"); return fd; } printf(" %s : %s",file,buf); close(fd); return 0; } int main(int argc, char *argv[]) { if (4 != argc) { if (3 != argc) { fprintf(stderr, "set gpio out : %s \n", argv[0]); fprintf(stderr, "set gpio in : %s \n", argv[0]); exit(-1); } } sprintf(gpio_path, "/sys/class/gpio/gpio%s", argv[1]); if (access(gpio_path, F_OK)) { printf("%s inexistence,export %s... \n",gpio_path,argv[1]); int fd; int len; if (0 > (fd = open("/sys/class/gpio/export", O_WRONLY))) { perror("open error"); exit(-1); } len = strlen(argv[1]); if (len != write(fd, argv[1], len)) { perror("write error"); close(fd); exit(-1); } close(fd); } if (gpio_config("direction", argv[2])) exit(-1); if ( 0 == strcmp("out",argv[2] ) && argc == 4 ) { if(gpio_config("value", argv[3])) exit(-1); } printf("GPIO%s:\n",argv[1]); if (gpio_get("direction")) exit(-1); if (gpio_get("value")) exit(-1); exit(0); } 交叉编译源码: aarch64-linux-gnu-gcc -o gpio gpio.c 将编译好的gpio程序使用scp拷贝到 r36s0 主板上,执行测试: 使用方法: 1:./gpio 56 out 1 0:./gpio 56 out 0 {{:arm:rk3399:linux:36s0_gpio10.png?600|}} === UART 应用编程 === 系统下操作 UART 的测试串口,以 232_RX5\TX5 测试为例: 232_RX5\TX5 设备节点为: /dev/ttyS7 C参考UART高低电平输入代码如下: #include #include #include #include #include #include #include #include #define UART_DEVICE "/dev/ttyS7" //uart设备文件名称 int main(int argc, char *argv[]) { int fd, res; struct termios oldtio, newtio; char ch; char buf[256] = {0}; //-----------打开uart设备文件------------------ fd = open(UART_DEVICE, O_RDWR|O_NOCTTY);//没有设置O_NONBLOCK。所以这里read和write是堵塞操作 if (fd < 0) { perror(UART_DEVICE); exit(1); } else printf("Open %s successfully\n", UART_DEVICE); //-----------设置操作?数----------------------- tcgetattr(fd, &oldtio);//获取当前操作模式?数 memset(&newtio, 0, sizeof(newtio)); //波特率=115200 数据位=8 使能数据接收 newtio.c_cflag = B115200|CS8|CLOCAL|CREAD; newtio.c_iflag = IGNPAR; tcflush(fd, TCIFLUSH);//清空输入缓冲区和输出缓冲区 tcsetattr(fd, TCSANOW, &newtio);//设置新的操作?数 //------------向urat发送数据------------------- res=write(fd, "Begin Uart tx", 16); while(1) { //从控制台终端获取数据,然后通过uart发送出去,直到接收到!字符 while((ch=getchar()) != '!') { buf[0]=ch; res=write(fd, buf, 1); } buf[0]=ch; buf[1]=' '; res = write(fd, buf, 2); break; } //-------------从uart接收数据------------------- while(1) { res = read(fd, buf, 255);//程序将在这里挂起,直到从uart接收到数据(堵塞操作) if (res == 0) continue; buf[res] = ' '; printf("res = %d, buf = %s\n", res, buf);//将uart接收到的字符打印出来 if (buf[0] == '!')//uart接收到!字符后退出while break; } //------------关闭uart设备文件,恢复原先?数-------- close(fd); printf("Close %s\n", UART_DEVICE); tcsetattr(fd, TCSANOW, &oldtio); //恢复原先的设置 return 0; } 交叉编译源码: aarch64-linux-gnu-gcc -o uart uart.c 将编译好的程序使用 scp 拷贝到 r36s0 主板上,执行测试: {{:arm:rk3399:linux:36s0_uart11.png?600|}} === KEY 应用编程 === 参考系统下操作Key的方法,获取到key的设备节点为 /dev/input/event3 C参考代码如下: #include #include #include #include #include #include #define INPUT_DEVICE "/dev/input/event3" int main(int argc, char **argv){ int fd; struct input_event event; ssize_t bytesRead; int ret; fd_set readfds; if ( 0 > (fd = open(INPUT_DEVICE,O_RDONLY))) { perror("open error"); return fd; } while(1){ FD_ZERO(&readfds); FD_SET(fd,&readfds); ret = select(fd + 1, &readfds, NULL, NULL, NULL); if (ret == -1){ fprintf(stderr,"select call on%s : an error ocurred",argv[1]); break; } if(FD_ISSET(fd,&readfds)){ bytesRead = read(fd, &event,sizeof(struct input_event)); if(bytesRead == -1 ) fprintf(stderr,"bytesRead :%ld : an error ocurred",bytesRead); } if(event.type == EV_KEY && (event.value == 0 || event.value == 1)) { printf("key %s\n",(event.value) ? "pressed" : "released"); } } close(fd); return EXIT_SUCCESS; } 交叉编译源码: aarch64-linux-gnu-gcc -o key key.c 将编译好的程序使用 scp 拷贝到 r36e0 主板上,执行测试,按动 key 打印如下: {{:arm:rk3399:linux:36s0_key2.png?600|}} *按下按键时显示:key pressed *松开按键时显示:key released ==== Linux 应用支持 ==== === QT交叉编译环境 === * 主机环境推荐:Debian 10 x64 bit, 本公司已配置好的QT编译环境 Docker image: [[ftp://drv.nodka.com/arm_download/nodka_docker_qt_build_20230223.tar|QT编译环境Docker]] ### load docker image sudo docker load Option ,找到Kits。 *配置 Qt Versions 点击右侧 add 按钮添加,选择 Qt 环境安装位置中的 qmake 即可 qmake: /usr/local/qt5.12-arm/bin/qmake {{:arm:rk3399:linux:linux_qt-1.png?600|}} *配置 Compilers 点击右侧 add 按钮添加 gcc 和 g++ 交叉编译器的位置 如果主机安装了 crossbuild-essential-arm64,则编译器就在 /usr/bin/ 下 如果使用了第三方的交叉编译器,找到安装位置并添加即可 如果目标平台是 Buildroot ,则需要使用 Buildroot Qt 环境包中的编译器 g++:/usr/bin/aarch64-linux-gnu-g++ {{:arm:rk3399:linux:linux_qt-3.png?600|}} gcc:/usr/bin/aarch64-linux-gnu-gcc {{:arm:rk3399:linux:linux_qt2-2.png?600|}} 为方便调试,配置 Debeggers 和 Devices 用于在线调试: *配置 Debuggers 点击右侧 add 按钮添加 gbd-multiarch: apt install -y gdb-multiarch 检查目标机上是否存在 /usr/bin/gdbserver, 没有的话需要安装:apt install -y gdbserver,没有的话需要安装:apt install -y gdbserver (Buildroot 自带,无需安装) 回到主机的 Qt Creator,点击右侧 add 按钮添加 gdb 选择主机中的 gdb-multiarch : /usr/bin/gdb-multierch {{:arm:rk3399:linux:linux_qt-4.png?600|}} *配置 Devices 设置好设备的 IP 、用户名(root)。为了方便调试,可以在设备上设置静态 IP。 {{:arm:rk3399:linux:linux_qt-5.png?600|}} *配置Kits 将前面设置的配置项添加到 Kits。 如果目标平台是 Ubuntu 系统,这一步也需要添加 sysroot 的路径 {{:arm:rk3399:linux:linux_qt-6.png?600|}} === 高清硬解码 === {{page>:template:temp_Linux_dec}} === Docker === Docker English-Community 支持以下的 Ubuntu 版本: *Xenial 16.04(LTS) *Bionic 18.04(LTS) *Cosmic 18.04 *Disco 19.04 *其他更新的版本... 安装命令如下: curl -fsSL https://get.docker.com | bash -s docker --miror Aliyun 也可以使用国内 daocloud 一键安装命令: curl -sSL https://get.daocloud.io/docker | sh 测试 Docker 是否安装成功,输入以下指令,打印出以下信息则安装成功: sudo docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 1b930d010525: Pull complete Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ ===OpenCL=== * 系统已经支持OpenCL,输入命令clinfo即可查看支持详情: {{:arm:rk3399:linux:opencl.png?600|}} ==== Linux OTA 在线升级 ==== {{page>:template:temp_Linux_upgrade}} 终端输入 ota 进行固件在线升级 {{:arm:rk3399:linux:r39x2_ota.c.png?600|}}