该笔记类别主要是在自己学习时做的一些记录,方便自己很久不用忘掉时进行快速回忆
1 简述
被封装用于特定功能的代码,位于应用层和设备驱动框架层之间,为保证通用性,确保不耦合业务逻辑。通过env来选择加载那些软件包和对于版本,完成后进行scons编译即可。
2创建
生成索引向导
打开env,然后输入命令行
okgs --wizard
如图进行配置,输入包名,版本,类别,之后将会在env的根目录建立一个对于名字的文件夹。
更改目录结构
由于包索引被同一存放在env/packages目录中,而目录env/packages/packages/是官方软件包,于是需要建立一个自己的软件包源。
- 在env/package/目录下建立my_packages文件夹
- 修改env/package/目录下Kconfig文件
source "$PKGS_DIR/packages/Kconfig"
source "$PKGS_DIR/my_packages/Kconfig"
- 将env/packages/packages/目录中的Kconfig复制到my_packages文件夹中,对其修改为:
menu "RT-Thread online my_packages"
source "$PKGS_DIR/my_packages/iot/Kconfig"
endmenu
- 在my_packages目录下建立iot文件夹,将自己的索引包扔到里面去,在iot目录下建立Kconfig
menu "IoT - internet of things"
source "$PKGS_DIR/my_packages/iot/software_tool/Kconfig"
endmenu
- 在software_tool文件夹中,修改Kconfig中的索引地址
default "/my_packages/iot/software_tool"
官方文档对该文件的注解图
- 修改packages.json
该文件主要需要填写软件包的下载地址信息
未修改代码为:
{
"name": "software_tool",
"description": "a software_tool package for rt-thread", #软件包的描述
"keywords": [
"software_tool"
],
"site" : [
{"version" : "v1.0.0",
"URL" : "https://software_tool-1.0.0.zip", #该版本对于的软件包下载地址
"filename" : "software_tool-1.0.0.zip",
"VER_SHA" : "fill in the git version SHA value"},#压缩包形式无需填写
{"version" : "latest_version",
"URL" : "https://xxxxx.git", #填入git仓库地址
"filename" : "Null for git package",
"VER_SHA" : "fill in latest version branch name,such as mater" #填入分支名字
}
]
}
修改后示例:
{
"name": "software_tool",
"description": "a software_tool package for rt-thread",
"keywords": [
"software_tool"
],
"site" : [
{"version" : "v1.0.0", "URL" : "https://github.com/RT-Thread-packages/hello/archive/v1.0.0.zip","filename" : "software_tool-1.0.0.zip"},
{"version" : "latest_version", "URL" : "https://github.com/lissettecarlr/software_tool.git","filename" : "software_tool.zip","VER_SHA" : "master"}
]
}
由于仓库没有发表第一个版本,这里暂时使用官方提供的hello代替。
3 加载软件包
打开env,切换到对于bsp目录,然后键入menuconfig进入配置页面,将会发现如下图,多出一个my_packages
点击进入将会看到自己的软件包,然后选择1.0.0版本进行加载。退出保存后,下载软件包
pkgs --update
等待一段时间后显示下载成功,然后编译工程
scons --target=mdk5
打开keil工程,然后就会发现左侧多了一个对于文件夹,由于下载的是hello的软件代码,所以这里显示的是hello
4 软件包实体
上文表示的是创建索引和导入下载软件包,这里将表述软件包的仓库,也就是实际代码的位置。
规范化软件包的目录结构,参考官方示例包hello,在建立自己的仓库后,需要将在本地生成的链接文件夹中的SConscript文件剪切到你的仓库根目录下。
开发者通过在example中编写示例代码,进行测试后,发布对应版本,该版本信息也就是在packages.json文件中需要填写的内容了,如下列代码,填写对应版本号,和发布版本处获取的zip下载链接地址。
{"version" : "v1.0.0",
"URL" : "https://github.com/RT-Thread-packages/hello/archive/v1.0.0.zip",
"filename" : "software_tool-1.0.0.zip"},
5 脚本SConscript
位于软件包中的该脚本修改为
from building import *
cwd = GetCurrentDir() # 将当前路径赋值给cwd
src = Glob('src/*.c') # 得到当前目录下所有的C文件
CPPPATH = [cwd + '/include']
group = DefineGroup('software_tool', src, depend = ['PKG_USING_SOFTWARE_TOOL'], CPPPATH = CPPPATH)
Return('group')
github上的目录结构如下图
6 完善
这里在github上面发布一个版本:
然后复制source code(zip)的地址,修改packages.json文件中1.0.0版本地址的地方。
{
"name": "software_tool",
"description": "a software_tool package for rt-thread",
"keywords": [
"software_tool"
],
"site" : [
{"version" : "v1.0.0", "URL" : "https://github.com/lissettecarlr/software_tool/archive/1.0.0.zip","filename" : "software_tool-1.0.0.zip"},
{"version" : "latest_version", "URL" : "https://github.com/lissettecarlr/software_tool.git","filename" : "software_tool.zip","VER_SHA" : "master"}
]
}
然后重复第三项加载软件包,这时候他提示警告,是因为之前下载hello地址的软件包也被命名为了software_tool,所以找到env/local_pkgs目录下,删除对于的包,然后重新执行即可,再次打开工程后会发现,hello的包和software_tool的数据包都同时存在,hello软件包这里就只能手动删除,而software_tool软件包已经被管理起来,可以通过menuconfig中选择或者取消。