差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
nk-r39s2-a1 [2023/03/05 23:53]
wjj
nk-r39s2-a1 [2023/06/04 19:18] (当前版本)
hc
行 17: 行 17:
 ==== 快速上手 ==== ==== 快速上手 ====
 === 系统烧录 === === 系统烧录 ===
-{{page>:template:temp_burn}}+ 
 +1、下载烧录工具: 
 +  * 请务必先安装驱动,烧录工具链接含有驱动DriverAssitant压缩包,解压后点击DriverInstall.exe安装驱动 
 +  
 +{{:arm:rk3399:3399-shaolu.png?600×365|}} 
 + 
 +2、开始烧录: 
 +  * 将数据线一端与主板OTG连接,另一端连接电脑。注意烧录前,需关闭电源,开电源时按住boot_key按键进行烧入。 
 + 
 +{{:arm:rk3399:linux:r39sa1_jx1.png?600|}} 
 + 
 +  * 打开压缩包中开发工具 >> 升级固件 >> 点击固件并选择好固件 >> 点升级开始烧录 
 + 
 +{{:arm:rk3399:linux:r39sa1_jx2.png?600|}} 
 + 
 +  * 烧录过程中的状态,会有进度显示 
 + 
 +{{:arm:rk3399:linux:r39sa1_jx3.png?600|}} 
 + 
 +  * 更换系统平台(例如安卓切换到Linux)时,可能出现无法烧录的情况,此时打开开发工具 >> 高级功能 >> 点击进入Maskrom切换烧录模式后烧录系统 
 + 
 +{{:arm:rk3399:moshi.png?600×456|}} 
 + 
 +3、完成烧录: 
 +  * 烧录过程不需要任何操作,烧录成功后右框会显示设备自动重启,烧录完成。 
 + 
 +{{:arm:rk3399:linux:r39sa1_jx4.png?600|}} 
 + 
 +=== Fwbackups备份软件安装 === 
 + 
 +{{page>:template:R39S2_qq}} 
 + 
 +=== 生成rootfs镜像 === 
 + 
 +{{page>:template:R39S2_zz}} 
 === Debug串口调试 === === Debug串口调试 ===
 1、通过串口进入系统后台,需要利用板子的Debug接口,接口位置和定义如图: 1、通过串口进入系统后台,需要利用板子的Debug接口,接口位置和定义如图:
行 60: 行 95:
 {{page>:template:temp_android_uart}} {{page>:template:temp_android_uart}}
 == LAN == == LAN ==
-{{page>:template:temp_android_lan}}+1. 将网线连接到主板LAN1接口上 
 + 
 +{{:arm:rk3399:linux:r39s2_lan.png?600|}} 
 + 
 +2. 查看网卡IP地址 
 + 
 + a)点击设置 =点击更多 
 +   
 +{{:arm:rk3399:android:lan-2.png?600|}} 
 +   
 + b)点击Ethernet 
 +   
 +{{:arm:rk3399:android:lan-3.png?600|}} 
 + 
 + c)查看IP地址,一般系统默认动态获取IP地址 
 +   
 +{{:arm:rk3399:android:lan-4.png?600|}} 
 + 
 +3. 连接上网络后,打开浏览器浏览网页查看是否连接上网络 
 + 
 +{{:arm:rk3399:android:lan-5.png?600|}} 
 + 
 +4.设置以太网静态IP地址 
 + 
 + * 点击 Ethernet IP mode 选择 static 
 + 
 +{{:arm:rk3399:android:lan-6.png?600|}} 
 + 
 + * 进行设置 
 + 
 +{{:arm:rk3399:android:lan-7.png?600|}} 
 == WIFI == == WIFI ==
-{{page>:template:temp_android_wifi}}+1.打开设置,点击WLAN 
 + 
 +{{:arm:rk3399:android:wifi_1.png?600|}} 
 + 
 +2.点击开启 
 + 
 +{{:arm:rk3399:android:wifi_2.png?600|}} 
 + 
 +3.浏览可用的WIFI路由,然后点击,输入密码 
 + 
 +{{:arm:rk3399:android:wifi_3.png?600|}} 
 + 
 +4.连接成功右上角状态栏图标变为这样 
 + 
 +{{:arm:rk3399:android:wifi_4.png?600|}}
 == 4G/5G == == 4G/5G ==
 1.测试4G网络 1.测试4G网络
行 178: 行 258:
  
 == LAN == == LAN ==
-{{page>:template:temp_linux_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 == == WIFI ==
-{{page>:template:temp_linux_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 == == 4G/5G ==
-{{page>:template:temp_linux_4g5g}}+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 == == Can ==
 {{page>:template:temp_linux_can}} {{page>:template:temp_linux_can}}
行 221: 行 345:
 {{page>:template:temp_linux_gpio}} {{page>:template:temp_linux_gpio}}
 == Audio == == Audio ==
-{{page>:template:temp_linux_audio}}+  * 将喇叭连接板子上的 SPK 端口 
 + 
 +1. 方法① -- 使用系统自带SMPayer播放器,以及音频测试文件,可以做简单音频功能测试 
 + 
 +{{:arm:rk3399:linux:smplayer.png?600|}} 
 + 
 +2. 方法② -- 使用命令方式播放: 
 + 
 +  aplay  /nodka_test/LR_audio.wav  -D  hw:0,0
 == Mic == == Mic ==
-{{page>:template:temp_linux_mic}}+  * 录音测试 
 + 
 +  arecord -d 5 -f cd -r 44100 -c 2 -t wav test.wav   
 +  aplay test.wav
 == USB == == USB ==
-{{page>:template:temp_linux_usb}}+1. U盘自动挂载/media/disk 
 + 
 +  root@rk3399:~# df -h 
 +  文件系统        容量  已用  可用 已用% 挂载点 
 +  /dev/root        15G  3.6G   10G   27% / 
 +  devtmpfs        980M      980M    0% /dev 
 +  tmpfs           981M      981M    0% /dev/shm 
 +  tmpfs           981M  8.8M  972M    1% /run 
 +  tmpfs           5.0M  4.0K  5.0M    1% /run/lock 
 +  tmpfs           981M      981M    0% /sys/fs/cgroup 
 +  tmpfs           197M   16K  197M    1% /run/user/
 +  /dev/sda1        57G  2.7G   54G    5% /media/disk
 == SDCARD == == SDCARD ==
-{{page>:template:temp_linux_sdcard}}+ * SDcard 自动挂载: 
 + 
 +  root@rk3399:~# df -h 
 +  文件系统        容量  已用  可用 已用% 挂载点 
 +  /dev/root        15G  3.6G   10G   27% / 
 +  devtmpfs        980M      980M    0% /dev 
 +  tmpfs           981M      981M    0% /dev/shm 
 +  tmpfs           981M  8.8M  972M    1% /run 
 +  tmpfs           5.0M  4.0K  5.0M    1% /run/lock 
 +  tmpfs           981M      981M    0% /sys/fs/cgroup 
 +  tmpfs           197M   16K  197M    1% /run/user/
 +  /dev/mmcblk0p8   30G  3.8G   25G   14% /media/3699f79c-f05d-4948-89c9-04dc4b132a1f 
 +   
 +解除挂载: 
 + 
 +  umount /dev/mmcblk0p8 
 +   
 +挂载: 
 + 
 +  mount /dev/mmcblk0p8 /sdcard
 == Bluetooth == == Bluetooth ==
-{{page>:template:temp_linux_bluetooch}}+1. 打开蓝牙管理器,搜索附近蓝牙设备: 
 + 
 +{{:arm:rk3399:linux:bt1.png?600|}} 
 + 
 +2. 选中蓝牙设备,配对然后选择信任: 
 + 
 +{{:arm:rk3399:linux:bt2.png?600|}} 
 + 
 +3. 设置蓝牙连接类型: 
 + 
 +{{:arm:rk3399:linux:bt3.png?600|}}
 == WatchDog == == WatchDog ==
 {{page>:template:temp_linux_watchdog}} {{page>:template:temp_linux_watchdog}}
 == Key == == Key ==
-{{page>:template:temp_linux_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 == == LCD/Backlight ==
-{{page>:template:temp_linux_lcd}}+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 == == PowerManager ==
-{{page>:template:temp_linux_pm}}+1. 电源管理设置: 
 + 
 +{{:template:suspend.png?600|}} 
 + 
 +{{:template:pm.png?600|}} 
 + 
 +休眠后按POWER键唤醒 
 +2.  电源管理功能非所有产品支持,需定制系统请联系业务窗口人员。 
 == RTC/Timezone == == RTC/Timezone ==
-{{page>:template:temp_linux_rtc}}+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 ==
-{{page>:template:temp_linux_cpu}}+查看CPU信息: 
 + 
 +  cat /proc/cpuinfo
 == Memory == == Memory ==
-{{page>:template:temp_linux_mem}}+查看内存容量大小: 
 + 
 +  free -h 
 +  
 == EMMC == == EMMC ==
-{{page>:template:temp_linux_emmc}}+查看EMMC可用容量大小 
 + 
 +  df -h
 ==== Linux 编程指南 ==== ==== Linux 编程指南 ====
  
行 341: 行 604:
  exit(-1);   exit(-1); 
  }  }
- printf("GPIO%s:\n",argv[1]); + printf("gpio_op%s:\n",argv[1]);
  if (gpio_get("direction"))  if (gpio_get("direction"))
  exit(-1);  exit(-1);
行 351: 行 614:
 交叉编译源码: 交叉编译源码:
  
-  aarch64-linux-gnu-gcc -o gpio gpio.c+  aarch64-linux-gnu-gcc -o a.out gpio.c
  
 将编译好的gpio程序使用scp拷贝到 r39s2 主板上,执行测试: 将编译好的gpio程序使用scp拷贝到 r39s2 主板上,执行测试:
行 359: 行 622:
 0:./gpio 1 out 0 0:./gpio 1 out 0
  
-1./gpio 1 out 1+1./gpio 1 out 1
      
  
行 384: 行 647:
 #include <stdlib.h> #include <stdlib.h>
  
-#define UART_DEVICE     "/dev/ttyXRUSB1" //uart设备文件名称+#define UART_DEVICE     "/dev/ttysWK2" //uart设备文件名称
  
 int main(int argc, char *argv[]) int main(int argc, char *argv[])
行 453: 行 716:
 交叉编译源码: 交叉编译源码:
  
-  aarch64-linux-gnu-gcc -o uart uart.c+  aarch64-linux-gnu-gcc -o a.out uart.c
  
 将编译好的程序使用 scp 拷贝到 3399 主板上,执行测试: 将编译好的程序使用 scp 拷贝到 3399 主板上,执行测试:
行 513: 行 776:
  
 <code>  <code> 
-aarch64-linux-gnu-gcc -o key key.c+aarch64-linux-gnu-gcc -o key1 key.c
 </code> </code>
 将编译好的程序使用 scp 拷贝到 r39s2 主板上,执行测试,按动 key 打印如下: 将编译好的程序使用 scp 拷贝到 r39s2 主板上,执行测试,按动 key 打印如下:
行 527: 行 790:
 ==== Linux 应用支持 ==== ==== Linux 应用支持 ====
 === QT交叉编译环境 === === QT交叉编译环境 ===
-{{page>:template:temp_Linux_qt}}+* 主机环境推荐:Debian 10 x64 bit, 
 +可以直接导入配置好的虚拟机镜像: 
 +[[ftp://drv.nodka.com/arm_download/debian_10_qt_build.ova|QT编译环境virtualbox]] 
 +       
 +或者使用QT编译环境 Docker image: 
 +[[ftp://drv.nodka.com/arm_download/nodka_docker_qt_build_20230223.tar|QT编译环境Docker]] 
 + 
 +   ### load docker image  
 +   sudo docker load <nodka_docker_qt_build_20230223.tar 
 +    
 +   ### 运行docker image,注意 : /home/APP_PATH为QT应用程序所在目录 
 +   sudo docker run --rm --mount type=bind,source=/home/APP_PATH,target=/mnt/ -i -t 09a37c1b2fc3 /bin/bash  
 +   
 +   ###  编译QT 应用程序 
 +   cd  /mnt 
 +   qmake 
 +   make 
 +* 主机交叉编译环境配置参考步骤: 
 + 
 + 1. 安装交叉编译工具链: 
 +    apt install -y crossbuild-essential-arm64 
 +     
 + 2. 拷贝平板系统内的/usr & /lib 到主机 /home/nodka/qt5/qt_sysroot 目录下 
 + 
 + 3. 配置以下环境变量  
 + 
 +  QTSYSROOT="/home/nodka/qt5/qt_sysroot" 
 +  QTPATH=$QTSYSROOT/usr/local/qt5.12-arm 
 +     
 +  LD_LIBRARY_PATH=$QTPATH/lib:$LIBRARY_PATH 
 +  LIBRARY_PATH=$QTPATH/lib:$LIBRARY_PATH 
 +  C_INCLUDE_PATH=$QTPATH/include:$C_INCLUDE_PATH 
 +  PATH=$QTPATH/bin:$PATH 
 +     
 +  PKG_CONFIG_PATH=$QTPATH/lib/pkgconfig:$PKG_CONFIG_PATH 
 +     
 +  export LD_LIBRARY_PATH 
 +  export LIBRARY_PATH 
 +  export C_INCLUDE_PATH 
 +  export CPLUS_INCLUDE_PATH 
 +     
 +  export PKG_CONFIG_PATH 
 +  export PATH 
 + 
 + 
 + 4. 编译APP 
 +   
 +  qmake 
 +  make 
 + 
 +{{:template:pasted:20230204-012752.png}} 
 === QT Creator === === QT Creator ===
-{{page>:template:temp_Linux_qt_creator}}+1. 安装 
 + 
 +进入Qt官方下载页面,选择一个版本下载 qt-creator-opensource-linux-x86_64-x.x.x.run,下载完成之后,在终端执行 ./xxxx.run 运行安装,注意文件需要有执行权限。 
 + 
 +2.配置 
 + 
 +安装完成后,启动 Qt Creator,打开菜单 Tools -> 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}} {{page>:template:temp_Linux_dec}}
 === Docker === === Docker ===
-{{page>:template:temp_Linux_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===
打印/导出