3328的官网 http://www.t-firefly.com/doc/product/index/id/34.html

官方网站:http://www.t-firefly.com

开发者社区:http://developer.t-firefly.com联系电话(紧急问题):(+86)18688117175技术支持  -  邮箱: service@t-firefly.com技术交流群①:431139193(已满) 技术交流群②:586343230

如何通过 SD 卡启动系统

http://wiki.t-firefly.com/zh_CN/ROC-RK3328-CC/flash_sd.html
如何通过emmc 启动系统

http://wiki.t-firefly.com/zh_CN/ROC-RK3328-CC/flash_emmc.html

如何制作 Linux SD 卡 启动系统

http://www.t-firefly.com/doc/product/info/id/247.html

如何制作 Android SD 卡 启动系统

http://www.t-firefly.com/doc/product/info/id/343.html
源码获取
Android: https://gitlab.com/TeeFirefly/RK3328-Nougat.git
Linux: https://github.com/FireflyTeam

教你如何搭建环境和下载和编译rk3288开发板的android及linux的
http://wiki.t-firefly.com/zh_CN/ROC-RK3328-CC/android_compile_android7.html

//
http://wiki.t-firefly.com/zh_CN/ROC-RK3328-CC/index.html

ROC-RK3288-CC

编译 Android 7.1
准备
硬件配置

编译 Android 7.1 开发环境硬件配置建议:

64 位 CPU
16GB 内存 + 交换内存
30GB 空闲空间用来编译, 源码树另占 8GB

另外可参考 Google 官方文档硬件和软件配置:

https://source.android.com/setup/build/requirements
https://source.android.com/setup/initializing

软件配置

安装 JDK 8

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk

安装环境包

sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev
libesd0-dev libwxgtk2.8-dev squashfs-tools build-essential zip curl
libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 libxml2-utils
xsltproc lzop libc6-dev schedtool g+±multilib lib32z1-dev lib32ncurses5-dev
lib32readline-gplv2-dev gcc-multilib libswitch-perl

sudo apt-get install gcc-arm-linux-gnueabihf
libssl1.0.0 libssl-dev
p7zip-full

下载 Android SDK

由于 SDK 较大,请选择以下云盘之一下载 ROC-RK3328-CC_Android7.1.2_git_20171204.7z:

Baiduyun
Google Drive

下载完成后,在解压前先校验下 MD5 码:

$ md5sum /path/to/ROC-RK3328-CC_Android7.1.2_git_20171204.7z
6d34e51fd7d26e9e141e91b0c564cd1f ROC-RK3328-CC_Android7.1.2_git_20171204.7z

然后解压:

mkdir -p ~/proj/roc-rk3328-cc
cd ~/proj/roc-rk3328-cc
7z x /path/to/ROC-RK3328-CC_Android7.1.2_git_20171204.7z
git reset --hard

更新远程仓库:

git remote rm origin
git remote add gitlab https://gitlab.com/TeeFirefly/RK3328-Nougat.git

从 gitlab 处同步源码:

git pull gitlab roc-rk3328-cc:roc-rk3328-cc

也可以到如下地址查看源码: https://gitlab.com/TeeFirefly/RK3328-Nougat/tree/roc-rk3328-cc
使用 Firefly 脚本编译

编译内核

./FFTools/make.sh -k -j4

编译 U-Boot

./FFTools/make.sh -u -j4

编译 Android

./FFTools/make.sh -a -j4

编译全部

如下指令会编译出内核, U-Boot 以及 Android

./FFTools/make.sh -j4

不使用脚本编译

编译之前请先执行如下命令配置好环境变量:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=JAVAHOME/bin:JAVA_HOME/bin:JAVAH​OME/bin:PATH
export CLASSPATH=.:JAVAHOME/lib:JAVA_HOME/lib:JAVAH​OME/lib:JAVA_HOME/lib/tools.jar

编译内核

make ARCH=arm64 firefly_defconfig
make -j8 ARCH=arm64 rk3328-roc-cc.img
make -j8 ARCH=arm64 modules

编译 U-Boot

make rk3328_box_defconfig
make ARCHV=aarch64 -j4

编译 Android

source build/envsetup.sh
lunch roc_rk3328_cc_box-userdebug
make installclean
make -j4
./mkimage.sh

打包 RK 固件 在 Linux 下打包固件

编译完成后使用 Firefly 官方脚本即可打包所有的分区映像成 RK固件:./FFTools/mkupdate/mkupdate.sh update

最终生成的文件是 rockdev/Image-rk3328_firefly_box/update.img.

在 Windows 下打包固件

在 Windows 下打包 RK 固件 update.img 也是很简单的:

拷贝所有在 rockdev/Image-rk3328_firefly_box/ 目录下编译好的文件到 AndroidTool 的 rockdev\Image 目录下。
运行在 AndroidTool 的 rockdev 目录下的 mkupdate.bat 文件。
在 rockdev\Image 目录将会生成 update.img。

分区映像

update.img 是发布给最终用户的固件,方便升级开发板。而在实际开发中,更多的时候是修改并烧写单个分区映像文件,这样做大大节省开发时间。

下表总结了在各个编译阶段所生成的分区映像文件:

|------------------|---------------------|-----------|

Stage Product Partition
Compiling Kernel kernel/kernel.img kernel
kernel/resource.img resource
------------------ --------------------- -----------
Compiling U-Boot u-boot/uboot.img uboot
------------------ --------------------- -----------
./mkimage.sh boot.img boot
system.img system
------------------ --------------------- -----------

注意,执行 ./mkimage.sh 后, boot.img 和 system.img 将会被重新编译并打包到目录 out/target/product/rk3328_firefly_box/ 下,所有生成的映像文件将会拷贝到目录 rockdev/Image-rk3328_firefly_box/ 下。

如下是映像文件列表:(.img文件是RK格式固件)

boot.img: Android 的 initramfs 映像,包含Android根目录的基础文件系统,它负责初始化和加载系统分区。
system.img: ext4 文件系统格式的 Android 文件系统分区映像。
kernel.img: 内核映像。
resource.img: Resource 映像, 包含启动图片和内核设备树。
misc.img: misc 分区映像, 负责启动模式的切换和急救模式参数的传递。
recovery.img: Recovery 模式映像。
rk3328_loader_v1.08.244.bin: Loader 文件。
uboot.img: U-Boot 映像文件。
trust.img: Arm trusted file (ATF) 映像文件。
parameter.txt: 分区布局和内核命令行。

///
http://www.t-firefly.com/doc/product/info/id/271.html

Uboot 使用

更新时间:2018-05-21 阅读:1790
前言

RK Uboot 是基于开源的 Uboot 进行开发的,Uboot 的工作模式有启动加载模式和下载模式。启动加载模式是 Uboot 的正常工作模式,嵌入式产品发布时,Uboot都工作在此模式下,主要用于开机时把 FLASH 中的内核加载到 SDRAM 中,启动操作系统;下载模式主要用于将固件下载到 FLASH,开机时长按 RECOVERY 键可进入下载模式。本文简单说明 Uboot 的使用,更多 Uboot 相关文档请看 SDK 下面的 RKDocs/Develop reference documents/Rockchip U-Boot 开发指南 V3.7-20160708.pdf。注意,该文档主要是编译基于 Android 7.1 的 Uboot,其中 Android 7.1 的相关 SDK 在链接 Android_7.1_SDK 处下载。
编译

首先 cd 进入 Android 7.1 SDK 源码目录中的 u-boot 目录,编译前把默认配置写入 .config,执行

make rk3328_box_defconfig

如果需要修改相关选项,也可以用

make menuconfig

编译执行

make ARCHV=aarch64

编译后生成

u-boot/uboot.img
u-boot/trust.img
u-boot/rk3328_loader_v1.08.244.bin

烧录

打开烧录工具,板子接好 USB 双头公对公数据线(具体连接设备请参考 《连接设备》 或者 《Loader 模式》),上电时按住 RECOVERY 键,上电后松开 RECOVERY 键使开发板进入 Uboot 的下载模式,然后在烧录工具中选择编译好的 Loader 文件,点击"执行"按钮即可,如下图

rk3328-uboot使用图1.PNG 烧录工具是AndroidTool

地址 名字 路径
0x0000 0000 loaderddr u-boot/rk3328_loader_ddr786_v1.06.243.bin
0x0000 4000 uboot u-boot/uboot.img
0x0000 6000 trust u-boot/trust.img

注意:该软件默认是英文的,但是将 AndroidTool_Release_v2.39/config 配置文件中的 Selected=2 修改为 Selected=1 并保存,然后重启软件,可以切换为中文界面;其中"地址"、“名字”、"路径"都是可以修改的,这里需要特别注意地址字段的填写,图中显示的是正确的烧录地址。
确认是否正确烧写新的 Loader

如果你已经成功烧写你最新编译的 Loader,在开机的串口输出 log 中可以看到类似如下信息:

#Boot ver: 2016-12-19#1.05

如果打印的时间及版本与你编译的一致,说明你成功更新了Loader。
进入 Uboot 命令行模式

由于 Firefly 产品主要用于开发,所以我们默认设置开机时有1秒的倒计时,如果这时候在串口输入任意键即可进入 u-boot命令行模式。 发布的产品是不需要进入 u-boot 命令行模式的,如果需要设置 u-boot 默认不进入命令行模式的,可以做如下修改:
在文件 u-boot/include/configs/rk33plat.h

/* mod it to enable console commands. */
#define CONFIG_BOOTDELAY 0

把宏 CONFIG_BOOTDELAY 改为 0 即默认不进入命令行模式。
一级 Loader

U-Boot 作为一级 Loader 模式,那么仅支持 eMMC 存储设备,编译完成后生成的镜像:

RK3328LoaderU-BOOT_V2.17.01.bin

其中 V2.17.01 是发布的版本号,rockchip 定义 U-Boot loader 的版本,其中 2.17 是根据存储版本定义的,客户务必不要修改这个版本,01 是 U-Boot 定义的小版本,用户根据实际需求在 Makefile 中修改。
二级 Loader

U-Boot 作为二级 Loader 模式,那么固件支持所有的存储设备,该模式下,需要 MiniLoader 支持,通过宏CONFIG_MERGER_MINILOADER 进行配置生成。同时引入 Arm Trusted,Firmware 后会生成 trust image,这个通过宏CONFIG_MERGER_TRUSTIMAGE 进行配置生成。
RK3328 使用二级 Loader,编译生成的镜像为:

u-boot/uboot.img
u-boot/trust.img
u-boot/RK3328MiniLoaderAll_V1.05.bin

其中 V1.05 是发布的版本号,rockchip 定义 U-Boot loader 的版本,其中 1.05 是根据存储版本定义的,客户务必不要修改这个版本。 uboot.img 是 U-Boot 作为二级 loader 的打包。 trust.img 是 U-Boot 作为二级 loader 的打包。
/

烧录

dd if=uboot.img of=/dev/sdb seek=(((0x00002000+0x00002000)))ibs=1Mconv=sync,fsyncddif=trust.imgof=/dev/sdbseek=(((0x00002000 + 0x00002000))) ibs=1M conv=sync,fsync dd if=trust.img of=/dev/sdb seek=(((0x00002000+0x00002000)))ibs=1Mconv=sync,fsyncddif=trust.imgof=/dev/sdbseek=(((0x00004000 + 0x00002000))) ibs=1M conv=sync,fsync
dd if=misc.img of=/dev/sdb seek=(((0x00008000+0x00002000)))ibs=1Mconv=sync,fsyncddif=resource.imgof=/dev/sdbseek=(((0x00008000 + 0x00002000))) ibs=1M conv=sync,fsync dd if=resource.img of=/dev/sdb seek=(((0x00008000+0x00002000)))ibs=1Mconv=sync,fsyncddif=resource.imgof=/dev/sdbseek=(((0x0000A800 + 0x00002000))) ibs=1M conv=sync,fsync
dd if=kernel.img of=/dev/sdb seek=(((0x00012000+0x00002000)))ibs=1Mconv=sync,fsyncddif=boot.imgof=/dev/sdbseek=(((0x00012000 + 0x00002000))) ibs=1M conv=sync,fsync dd if=boot.img of=/dev/sdb seek=(((0x00012000+0x00002000)))ibs=1Mconv=sync,fsyncddif=boot.imgof=/dev/sdbseek=(((0x00022000 + 0x00002000))) ibs=1M conv=sync,fsync
dd if=recovery.img of=/dev/sdb seek=(((0x00032000+0x00002000)))ibs=1Mconv=sync,fsyncddif=system.imgof=/dev/sdbseek=(((0x00032000 + 0x00002000))) ibs=1M conv=sync,fsync dd if=system.img of=/dev/sdb seek=(((0x00032000+0x00002000)))ibs=1Mconv=sync,fsyncddif=system.imgof=/dev/sdbseek=(((0x000AC000 + 0x00002000))) ibs=1M conv=sync,fsync

dd if=uboot.img of=/dev/mmcblk0 seek=(((0x00002000+0x00002000)))ibs=1Mconv=sync,fsyncddif=trust.imgof=/dev/mmcblk0seek=(((0x00002000 + 0x00002000))) ibs=1M conv=sync,fsync dd if=trust.img of=/dev/mmcblk0 seek=(((0x00002000+0x00002000)))ibs=1Mconv=sync,fsyncddif=trust.imgof=/dev/mmcblk0seek=(((0x00004000 + 0x00002000))) ibs=1M conv=sync,fsync
dd if=misc.img of=/dev/mmcblk0 seek=(((0x00008000+0x00002000)))ibs=1Mconv=sync,fsyncddif=resource.imgof=/dev/mmcblk0seek=(((0x00008000 + 0x00002000))) ibs=1M conv=sync,fsync dd if=resource.img of=/dev/mmcblk0 seek=(((0x00008000+0x00002000)))ibs=1Mconv=sync,fsyncddif=resource.imgof=/dev/mmcblk0seek=(((0x0000A800 + 0x00002000))) ibs=1M conv=sync,fsync
dd if=kernel.img of=/dev/mmcblk0 seek=(((0x00012000+0x00002000)))ibs=1Mconv=sync,fsyncddif=boot.imgof=/dev/mmcblk0seek=(((0x00012000 + 0x00002000))) ibs=1M conv=sync,fsync dd if=boot.img of=/dev/mmcblk0 seek=(((0x00012000+0x00002000)))ibs=1Mconv=sync,fsyncddif=boot.imgof=/dev/mmcblk0seek=(((0x00022000 + 0x00002000))) ibs=1M conv=sync,fsync
dd if=recovery.img of=/dev/mmcblk0 seek=(((0x00032000+0x00002000)))ibs=1Mconv=sync,fsyncddif=system.imgof=/dev/mmcblk0seek=(((0x00032000 + 0x00002000))) ibs=1M conv=sync,fsync dd if=system.img of=/dev/mmcblk0 seek=(((0x00032000+0x00002000)))ibs=1Mconv=sync,fsyncddif=system.imgof=/dev/mmcblk0seek=(((0x000AC000 + 0x00002000))) ibs=1M conv=sync,fsync

/烧录工具 windows系统
SD_Firmware_Tool 烧录文件是update.img(RK固件)

//

原始固件,是一种能以逐位复制的方式烧写到存储设备的固件,是存储设备的原始映像。原始固件一般烧写到 SD 卡中,但也可以烧写到 eMMC 中。 烧写原始固件有许多工具可以选用:
烧写 SD 卡
图形界面烧写工具:
SDCard Installer (Linux/Windows/Mac)
Etcher (Linux/Windows/Mac)
命令行烧写工具
dd (Linux)
烧写 eMMC
图形界面烧写工具:
AndroidTool (Windows)
命令行烧写工具:
upgrade_tool (Linux)
rkdeveloptool (Linux)

RK固件(update.img,其他的.img文件也是RK格式),打包 RK 固件,在 Linux 下打包固件编译完成后使用 Firefly 官方脚本即可打包所有的分区映像成 RK固件:./FFTools/mkupdate/mkupdate.sh update,编译过程见上。

windows烧写
RK 固件(./FFTools/mkupdate/mkupdate.sh update),update.img(其他的.img格式文件也是)是以 Rockchip专有格式打包的固件,使用 Rockchip 提供的 upgrade_tool (Linux) 或 AndroidTool (Windows) 工具烧写到eMMC 闪存中。RK 固件是 Rockchip 的传统固件打包格式,常用于 Android 设备上。另外,Android 的 RK 固件也可以使用 SD Firmware Tool 工具烧写到 SD 卡中
SD_Firmware_Tool  选择SD启动,烧写 update.img
使用 AndroidTool 之前, 应先安装 Rockusb 驱动(是DriverAssitant_v4.5这个文件),然后再安装运行 AndroidTool(以管理员身份),先按着复位键给板子上电(注意USB会供电,要先断开)进入,此时设备处于 Rockusb 模式,状态行将显示 “发现一个LOADER设备”。点击升级固件->固件-》选择update.img。–>点击升级就下载进emmc了。

linux系统烧写emmc
RK 固件
如果开发板原有系统是 RK 固件,那么它使用 parameter 文件作为分区方案,这样就可直接使用分区名称来烧写分区映像:
1. 强制设备进入 Rockusb 模式,按下按键插上电。
2. 使用 upgrade_tool 烧写分区映像:
upgrade_tool wl 0x2000 uboot.img
upgrade_tool wl 0x4000 trust.img
upgrade_tool di -b boot.img
upgrade_tool di -k kernel.img
upgrade_tool di -s system.img
upgrade_tool di -r recovery.img
upgrade_tool di -m misc.img
upgrade_tool di resource resource.img
upgrade_tool di -p parameter.txt # 烧写 parameter
upgrade_tool ul MiniLoaderAll.bin # 烧写 bootloader

upgrade_tool wl 0x2000 uboot.img
upgrade_tool wl 0x4000 trust.img
upgrade_tool wl 0x8000 misc.img
upgrade_tool wl 0xa000 parameter.txt
upgrade_tool wl 0xa800 resource.img
upgrade_tool wl 0x12000 kernel.img
upgrade_tool wl 0x22000 boot.img
upgrade_tool wl 0x32000 recovery.img
upgrade_tool wl 0xac000 system.img

注意:
• -b 是 boot 分区的预定义缩写。如果没有缩写可用,请改为分区名称,例如上述例子中的 resource。
• 可根据 《参数文件格式》 这份文档的说明自定义内核参数和分区布局。分区布局更改后,必须先重新烧写该 parameter 文件,方可重新烧写受影响的相应分区。

两种模式下的烧录文件偏移(我按下按键时是进入Rockusb Mode模式)
$ show_rk_parameter.sh device/rockchip/rk3328/parameter.txt
Rockusb Mode

NAME OFFSET LENGTH
uboot 0x00002000 0x00002000
trust 0x00004000 0x00004000
misc 0x00008000 0x00002000
baseparamer 0x0000a000 0x00000800
resource 0x0000a800 0x00007800
kernel 0x00012000 0x00010000
boot 0x00022000 0x00010000
recovery 0x00032000 0x00010000
backup 0x00042000 0x00020000
cache 0x00062000 0x00040000
metadata 0x000a2000 0x00008000
kpanic 0x000aa000 0x00002000
system 0x000ac000 0x00300000
userdata 0x003ac000 -

Maskrom Mode

NAME OFFSET LENGTH
uboot 0x00004000 0x00002000
trust 0x00006000 0x00004000
misc 0x0000a000 0x00002000
baseparamer 0x0000c000 0x00000800
resource 0x0000c800 0x00007800
kernel 0x00014000 0x00010000
boot 0x00024000 0x00010000
recovery 0x00034000 0x00010000
backup 0x00044000 0x00020000
cache 0x00064000 0x00040000
metadata 0x000a4000 0x00008000
kpanic 0x000ac000 0x00002000
system 0x000ae000 0x00300000
userdata 0x003ae000 -

ROC-RK3328-CC板子编译烧录环境记录相关推荐

  1. [原创]Nexus5 内核编译烧录过程记录

    参考Android系统源代码情况分析第二章进行实践,为了提高效率,也为了增加实践机会,使用Nexus5进行内核编译.需要说明的是,Android源代码工程默认是不包含它所使用的Linux内核源码,如果 ...

  2. 鸿蒙-HI3516-Docker环境搭建编译烧录

    最新的环境搭建教程请看:https://blog.csdn.net/qq_33259323/article/details/117854579 鸿蒙-HI3516-Docker环境搭建编译烧录 1.环 ...

  3. 超级便宜的鸿蒙开发板环境搭建-编译-烧录

    超级便宜的鸿蒙开发板环境搭建-编译-烧录 1.下载代码.编译工具和烧写工具 打开https://gitee.com/hihopeorg/Neptune-HarmonyOS-IOT下载代码 打开http ...

  4. 沁恒CH32V103C8T6(二): Linux RISC-V编译和烧录环境配置

    目录 沁恒CH32V103C8T6(一): 核心板焊接和Windows开发环境配置 沁恒CH32V103C8T6(二): Linux RISC-V编译和烧录环境配置 硬件准备 CH32V103 开发板 ...

  5. 鸿蒙开发板怎么玩?Neptune开发教程---OpenHarmony开发体验-环境搭建-编译-烧录

    目录 鸿蒙开发板(Neptune)开发教程-环境搭建-编译-烧录 Neptune简介 介绍特点 开发板参数 引脚 说明 开发环境搭建 linux编译环境搭建 python环境安装 hpm环境安装 wi ...

  6. 泰凌微ble mesh蓝牙模组天猫精灵学习之旅 ① 小白也痴迷,如何在 Linux环境搭建编译烧录 安信可TB02,点亮一盏LED灯;

    本<泰凌微ble mesh蓝牙模组天猫精灵学习之旅>系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.小 ...

  7. 苹果电脑能装鸿蒙,纯小白必看!鸿蒙编译及烧录环境分开部署For Mac

    前提说明: 一.办公环境使用的 mac 电脑,家里用的黑苹果,没有windows环境 二.CentOS7 及 windows 10 均使用 vmware 部署安装 三.编译环境:推荐使用 CentOS ...

  8. Ubuntu下的LGT8F328P MiniEVB Arduino开发和烧录环境

    基于 LGT8F328P LQFP32 的 Arduino MiniEVB, 这个板型资料较少, 记录一下开发环境和烧录过程以及当中遇到的问题. 关于 LGT8F328P 芯片参数 8位RISC内核 ...

  9. linux笔记(9):MangoPi-MQ(芒果派麻雀D1s)Tina系统编译烧录

    文章目录 1.下载相关资料 1.1 WhyCan Forum(哇酷开发者社区)提供的sdk 1.1.1 SDK解压过程 1.2 WhyCan Forum(哇酷开发者社区)提供的补丁 1.2.1 补丁包 ...

最新文章

  1. maven不引入parent_Idea开发环境中,开发springboot类型的项目,如果只引入parent节点,不添加依赖节点,maven是不会加载springboot的任何依赖的...
  2. Java线程详解(18)-障碍器
  3. Matlab之mdl:风力发电系统仿真模型power_wind_dfig文件
  4. [javaweb] servlet 服务器端转发和客户端重定向 (四)
  5. U3D开发中关于脚本方面的限制-有关IOS反射和JIT的支持问题
  6. Spring源码:BeanFactory
  7. 微信小程序阻止冒泡点击_微信小程序bindtap事件与冒泡阻止详解
  8. ubuntu linux kvm安装,ubuntu16.04 下kvm安装
  9. C++输入输出流加速器,关闭同步流,ios::sync_with_stdio(false)和 cin.tie(0)
  10. Windows Phone 程序发布过程
  11. pe给linux分区扩容,给linux虚拟机硬盘扩容(LVM分区)
  12. Sofia-SIP辅助文档三 - 编码指南
  13. Python编程实现预剪枝的CART决策树
  14. 源代码开发的公司该如何选择加密软件?
  15. c语言中ifelse语句的例子,ifelse语句例子
  16. html的size属性,HTML size属性用法及代码示例
  17. css语义化命名_为什么我只在生产中使用语义命名
  18. 利用物联网更好地管理供应链
  19. STM32-M3(野火)SD卡读写/移植znFAT文件访问系统
  20. Hive Load装载数据与HDFS的关系

热门文章

  1. 连接主机名失败但可以连接主机ip,能用ip地址连接却无法用主机名连接,看过来一站解决
  2. C++ TR1 正则表达式
  3. 吉他大横按的学习技巧总结
  4. 晚安前学习——第1天
  5. 结对-动漫网页设计-需求分析
  6. 【C语言】关于数组传参问题/首地址
  7. html页面整体缩小,浏览器缩放原理以及窗口、html页面大小
  8. 光滑曲线_微分几何笔记(4) —— 二维三维空间中曲线的曲率以及环绕数
  9. 2016--在技术的浪潮中自我实现
  10. 实用的配音软件推荐,确定不来看看?