目录
通常不需要这份文档,这是用于自行扩展固件的高级文档。
如果想将已有的库添加到固件中,或者生成自定义固件,可遵循以下步骤。
一、在线云编译
使用合宙的在线编译平台,高效,快速,不需要配置本地环境,编译完成后能够下载.SOC固件成品。
首选推荐使用。
劣势:需要联网,无法新增库。
地址:https://luatos.com/zh_cn/page/home.html
二、本地编译
劣势:操作繁琐,首次使用需要配置本地环境,不同主控芯片的编译方法差异较大。
优势:体验最新版固件,添加自定义工具或库,先期工具配置完成后,无需联网。
准备环境
Windows平台用户
装好7-zip,建议保持默认文件夹
装好xmake,建议保持默认文件夹
自行下载平头哥编译器
由于官网要登陆,如果不想登录,可以直接点击该链接下载
解压,文件夹重命名为csky-elfabiv2-tools-mingw-minilibc,放到E盘
拉取最新版固件及主库并在本地保存为同级目录:
Git clone luatos-soc-air101: 合宙Air101/Air103固件源代码, 适用于Air101/Air103/w806/w800/w801等基于xt804内核的芯片
如果是Air103
在资源管理器的地址栏输入(使用默认工具打开)或者在浏览器的地址栏输入custom定制头文件:
本机为(Air103):
G:\bsp\Air103\luatos-soc-air101\app\port\luat_conf_bsp.h
将#define AIR101改为#define AIR103,保存。
如果是Air105
检查点, 路径正确的情况下, 以下文件路径必存在, 找不到就肯定是命名问题, 手动添加是徒劳的 。
本机为(Air105):
G:\bsp\Air105\soc\LuatOS\lua\src\src\lgc.c
G:\bsp\Air105\soc\luatos-soc-air105\application\include\luat_conf_bsp.h(编译配置文件)
定制固件里的库
打开Air103:.\app/port/luat_conf_bsp.h
或Air105:.\application\include\luat_conf_bsp.h,
按需注释或取消注释。
注意,如果固件放不下,会编译失败。
编译
资源管理器中进入103仓库目录,如:G:\bsp\Air103\luatos-soc-air101
在地址栏中输入:CMD 回车,回在该路径下打开命令行CMD窗口。
编译前建议清除build目录;
执行
xmake f -c -v &&xmake
如果执行xmake提示: updating repositories .. error:
则说明xmake的repositories有冲突,git stash无法解决,需要删除repositories目录。
执行xmake时会自动拉取最新的repositories。
本机位于:
正常编译即可,生成的文件会在build/out/目录
生成过程及log文件解析
1、生成elf格式
ELF代表Executable and Linkable Forma,是一种对可执行文件、目标文件和库使用的文件格式,跟Windows下的PE文件格式类似,16进制形式。
text data bss dec hex filename
585972 0 126956 712928 ae0e0 build/out/AIR103.elf
generate normal image completed.
generate normal image completed.
2、按照设置文件设定的脚本区空间进行分配
AIR10X_FLASH_FS_REGION_SIZE 304
3、Info.json:空间分配及版本等基本信息输出
{"download":{"user_addr":"0x00000000","force_br":"2M","core_addr":"0x00000000","app_addr":"0x00000000","script_addr":"80B0000"},"user":{"project":"","version":"","log_br":"921600"},"version":1,"chip":{"type":"air103","ram":{"sys":64,"lua":176,"total":288}},"rom":{"version-bsp":"v0004","fs":{"script":{"size":304,"offset":"80B0000","type":"luadb"}},"file":"AIR103.fls","build":{"build_system":"","build_host":"","build_at":"","build_by":""},"mark":"default","version-core":"v0007"},"script":{"use-luac":true,"file":"script.img","lua":"5.3","bitw":32,"use-debug":true}}
4、fls文件压缩(使用7-ZIP)
7-Zip 19.00 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21
Scanning the drive:
4 files, 750777 bytes (734 KiB)
5、打包
生成soc: LuatOS-SoC_V0015_AIR103.soc,文件大小:443469 bytes (434 KiB)
Creating archive: LuatOS-SoC_V0015_AIR103.7z
Add new data to archive: 4 files, 750777 bytes (734 KiB)
Files read from disk: 4
Archive size: 443469 bytes (434 KiB)
Everything is Ok
[100%]: build ok!
6、烧写及运行
采用luatools烧写入air103,具体方法参考官方文档,不赘述。
Linux平台用户
装好7-zip与xmake,各个平台装法不一样(apt/yum/pacman),自己搜吧
7-zip
https://www.7-zip.org/a/7z2107-linux-x64.tar.xz
执行代码
cd opt
mkdir 7z
wget https://www.7-zip.org/a/7z2107-linux-x64.tar.xz
tar –xf 7z2107-linux-x64.tar.xz
导入可执行文件路径
1、直接用export命令:
#export PATH=$PATH: /opt/7z
查看是否已经设好,可用命令export查看:
2、修改profile文件:
#vi /etc/profile
在里面加入:
export PATH="$PATH: /opt/7z "
export PATH=$PATH:/opt/csky-elfabiv2-tools-mingw-minilibc/bin
#source /etc/profile
需要重新注销系统才能生效,最后可以通过echo命令测试一下: # echo $PATH 看看输出里面是不是已经有了 /opt/7z这个路径了。
cd /root/luatos/luatos-soc-air101
下载官方的wm_tool(linux版本)至:./tools/xt804/wm_tool
chmod -R 777 ./tools/xt804/wm_tool #取得root权限
自行下载平头哥编译器
由于官网要登陆,如果不想登录,可以直接点击该链接下载
解压,文件夹重命名为csky-elfabiv2-tools,放到/opt
准备项目
将LuatOS主仓库clone到适当位置
git clone https://gitee.com/openLuat/LuatOS.git
再将Air101项目clone到与LuatOS主仓库的同级目录
git clone https://gitee.com/openLuat/luatos-soc-air101.git
如果是Air103
打开app/port/luat_conf_bsp.h,将#define AIR101改为#define AIR103,保存
定制固件里的库
打开app/port/luat_conf_bsp.h,按需注释或取消注释。注意,如果固件放不下,会编译失败。
vim /root/luatos/luatos-soc-air101/app/port/luat_conf_bsp.h
编译
进入101仓库目录,编译即可,生成的文件会在build/out/目录
> cd /root/luatos/luatos-soc-air101
>vim /root/luatos/luatos-soc-air101/app/port/luat_conf_bsp.h
> xmake --root
LuatOS-SoC通用固件格式soc介绍
各种设备的刷机格式各不相同,有必要定义一个统一的对外格式,LuatOS统一称之为 soc 格式, 后缀选定为 soc, 实际内容为info.json及多个固件文件的压缩包,zip或7z均可
关于固件的定义
- 原始固件, 厂商提供的固件格式, 以fls/pac/img等命名, 使用厂商提供的工具进行刷机
- SoC固件, 在原始固件的基础上,添加info.json, script.bin 等LuatOS-SoC特有的文件,并做成压缩包, 使用LuaTools/LuatIDE刷机
SoC固件的内容
- [必选]包含的文件 info.json
- [可选]脚本数据存储文件 script.bin, 使用LuaDB v2格式存储
- [必选]原始固件,以不同SoC芯片为准
info.json的内容示例
{
"version" : 1, // 固件格式版本号
"chip" : { // 芯片本身的特性
"type" : "air101", // air101
"ram" : { // 内存信息
"total" : 288, // 总内存信息
"sys" : 64, // 系统内存大小
"lua" : 176 // Lua虚拟机可用内存
}
},
"bl": {// bl信息
"file" : "bootloader.bin"// bl文件
},
"partition": {// 分区表信息
"file" : "partition-table.bin"// 分区表文件
},
"rom": { // rom信息
"file" : "AIR101.fls",// 下载固件
"fs" : { // 文件系统信息
"script" : {
"offset" : "81E0000",// 偏移
"size" : 112, // 大小
"type" : "luadb"// 文件系统格式
}
},
"version-core": "v0007",// 主库代码版本
"version-bsp" : "v0004",// bsp版本
"mark" : "default",
"build" : {
"build_at" : "",
"build_by" : "",
"build_host" : "",
"build_system" : ""
}
},
"script" : {// 脚本信息
"file" : "script.bin",// 脚本文件
"lua" : "5.3",// lua版本
"bitw" : 32,
"use-luac" : true,
"use-debug" : true,
},
"fs" : {
"total_len" : 448,
"format_len" : "1000"
},
"user" : {
"project" : "",
"version" : "",
"log_br" : "921600"// 默认打印波特率
},
"download" : {
"bl_addr" : "ffffffff",// bl地址
"partition_addr" : "ffffffff",// 分区表地址
"core_addr" : "0x00000000",// 固件地址
"app_addr" : "0x00000000",// APP地址
"script_addr" : "0x81E0000",// 文件系统地址
"nvm_addr" : "00000000",// nvm地址
"fs_addr" : "00390000",// fs地址
"force_br" : "2M",// 默认下载波特率
"extra_param" : "002f0200"
}
}