编译和运行
dm-app 可以被编译成两种类型:可执行文件 (.mo) 和 库文件 (.so)。本质上两者都是 ET_DYN
类型的 ELF
文件,唯一的不同是:可执行文件指定了 main
函数作为执行入口,而库文件指定了 0
作为执行入口。
可执行文件 .mo
- 编译编译 dm-app 为可执行文件。如果是 windows 双击
win_env.bat
打开命令行运行环境,linux 直接使用 shell 命令行即可。具体步骤如下:$ cd luban-lite/packages/artinchip/aic-dm-apps $ scons --app=hello // 编译 $ ls hello/hello.mo // 查看目标文件 $ scons --app=hello -c // 清理
- 运行把
hello.mo
拷贝到单板存储介质的文件系统中,在 shell 下直接运行:aic /> /sdcard/hello.mo [AIC-DM-APP] init! // DM 初始化函数 module_init() [AIC-DM-APP] Hello, world! // DM 主函数 main() index => 0 // my_thread_init() 调用 rt-thread API 创建的线程 index => 1 index => 2 index => 3
库文件 .so
- 编译编译 dm-app 为库文件。具体步骤如下:
$ cd luban-lite/packages/artinchip/aic-dm-apps $ scons --lib=hello // 编译 $ ls hello/hello.so // 查看目标文件 $ scons --lib=hello -c // 清理
- 运行在 kernel 中使能
test_dm_lib
测试命令:Drivers options ---> Drivers examples ---> [*] Enable DM Lib test command
把hello.so
拷贝到单板存储介质的文件系统中,并使用test_dm_lib
命令来动态加载:aic /> test_dm_lib // dlopen() 动态加载 /sdcard/hello.so [AIC-DM-APP] init! // DM 初始化函数 module_init() index => 0 // my_thread_init() 调用 rt-thread API 创建的线程 index => 1 index => 2