鸿蒙移植i.mx6ull(四) 编译Liteos-a与APP(下)

简介: 鸿蒙移植i.mx6ull(四) 编译Liteos-a与APP

3.2 编译hello程序


使用Clang时,我们要指定很多参数:为哪类CPU编译程序(ARM还是Risc-V),CPU架构是什么(cortex A7还是cortex A15),头文件/库文件在哪? 在为Liteos-a编译程序时,以hello程序为例,可以执行以下命令:

cd  /home/book/doc_and_source_for_openharmony/apps/hello
clang -target arm-liteos   --sysroot=/home/book/openharmony/prebuilts/lite/sysroot/  \
   -o  hello   hello.c


上述命令的sysroot参数中,指定有标准头文件、库文件的目录。

还可以像GCC一样使用“-I”、“-L”参数指定其他头文件的目录、库文件的目录,比如后面会编译这个程序:

cd  /home/book/doc_and_source_for_openharmony/apps/freetype
clang -target arm-liteos   --sysroot=/home/book/openharmony/prebuilts/lite/sysroot/  \
-I /home/book/openharmony/third_party/freetype/include \
-L /home/book/openharmony/out/ipcamera_hi3518ev300/libs/usr  \
-lfreetype \
-o show_line show_line.c


3.3 把hello程序放入rootfs


编译出hello程序后,可以把它放入rootfs目录下的bin字母,比如:

cd  /home/book/doc_and_source_for_openharmony/apps/hello
cp  hello  /home/book/openharmony/kernel/liteos_a/out/imx6ull/rootfs/bin


然后重新制作rootfs.jffs2,执行以下命令:

cd  /home/book/openharmony/kernel/liteos_a/out/imx6ull/
mkfs.jffs2  -s 0x10000 -e 0x10000 -d rootfs -o rootfs.jffs2


假设hello程序位于/home/book/apps/hello目录下,操作截图如下:

1670998805404.jpg

把得到的rootfs.jffs2放到烧写工具的files目录,就可以使用烧写工具启动了:

1670998813982.jpg

进入命令行后,就可以执行hello程序了,如下图所示:

1670998823161.jpg

注意:必须用“./bin/hello”,不能用绝对路径“/bin/hello”


4. 编译其他APP


4.1 获取源码


我们提供了这几个程序:

1670998851498.jpg

放在GIT上,地址为:

https://e.coding.net/weidongshan/openharmony/doc_and_source_for_openharmony.git

为了方便,可以在Ubuntu中执行以下命令直接下载:

cd  /home/book
git  clone  https://e.coding.net/weidongshan/openharmony/doc_and_source_for_openharmony.git


这将会得到这个目录:/home/book/doc_and_source_for_openharmony


4.2 编译程序


假设已经下载得到/home/book/doc_and_source_for_openharmony目录,执行以下命令即可编译:

cd  /home/book/doc_and_source_for_openharmony/apps
for i in $(ls); 
  do cd $i; 
  make; 
  cd -; 
done


解释以下上面的命令。 $(ls)里列出了这几个目录:digital_photo_frame fb_test freetype hello。 对于其中的每一项“$i”,执行(do)这些命令:

cd  $i;
make; 
cd -


就是进入该目录,执行make命令,退到上一级目录。 你当然可以自己进入那些子目录,手工执行make命令。


注意:

(1)freetype、digital_photo_frame这2个程序,需要使用到前面编译出来的hi3518ev300的库文件。

(2)所以需要先执行“python build.py ipcamera_hi3518ev300 -b debug”

(3)如果鸿蒙源码的路径不是/home/book/openharmony,那么需要修改Makefile,如下修改路径:

1670998885852.jpg

4.3 复制程序到rootfs


这2个程序不依赖其他动态库:hello、fb_test;

但是freetype程序依赖libfreetype.so、digital_photo_frame程序依赖libfreetype.so、libjpeg.so。

这几个动态库在哪?我们取个巧,之前在《1.2.4 编译官方版本》执行过“python build.py ipcamera_hi3518ev300 -b debug”,它为hi3518ev300开发板生成了这写库文件。hi3518ev300与imx6ull同属cortex A7架构,所以imx6ull可以使用这些库。以后完善imx6ull的代码后,就不需要这样取巧了。 执行以下命令复制程序:

cd  /home/book/doc_and_source_for_openharmony/apps
# 拷贝应用程序
cp hello/hello  /home/book/openharmony/kernel/liteos_a/out/imx6ull/rootfs/bin
cp fb_test/fb_test  /home/book/openharmony/kernel/liteos_a/out/imx6ull/rootfs/bin
cp freetype/show_line /home/book/openharmony/kernel/liteos_a/out/imx6ull/rootfs/bin
cp digital_photo_frame/digitpic /home/book/openharmony/kernel/liteos_a/out/imx6ull/rootfs/bin
# 拷贝字体文件
cp freetype/simsun.ttc  /home/book/openharmony/kernel/liteos_a/out/imx6ull/rootfs/
# 拷贝数码相框的图标
cp digital_photo_frame/rootfs /home/book/openharmony/kernel/liteos_a/out/imx6ull/rootfs/  -rf
# 拷贝库文件
cp /home/book/openharmony/out/ipcamera_hi3518ev300/libs/usr/libfreetype.so /home/book/openharmony/kernel/liteos_a/out/imx6ull/rootfs/usr/lib/
cp /home/book/openharmony/out/ipcamera_hi3518ev300/libs/usr/libjpeg.so /home/book/openharmony/kernel/liteos_a/out/imx6ull/rootfs/usr/lib/


4.4 制作rootfs.jffs2


执行以下命令:

cd  /home/book/openharmony/kernel/liteos_a/out/imx6ull/
mkfs.jffs2  -s 0x10000 -e 0x10000 -d rootfs -o rootfs.jffs2


把得到的rootfs.jffs2放到烧写工具的files目录,就可以使用烧写工具启动了:

1670998918413.jpg

4.5 执行APP


这些APP,可以直接执行,如果需要参数的话,它会提示用法。

注意:必须用相对路径,比如“./bin/hello”;不能用绝对路径,比如“/bin/hello”


4.5.1 fb_test


执行以下命令:

./bin/fb_test /dev/fb0


效果如下:

1670998964479.jpg

4.5.2 show_line


执行以下命令:

./bin/show_line /simsun.ttc 230 230 100

效果如下:

1670998982920.jpg

4.5.3 digitpic


执行以下命令:

./bin/digitpic /simsun.ttc


可以点击屏幕上的图标,效果如下:

1670998521438.jpg

相关文章
|
7月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
仓颉语言实战分享,教你如何用仓颉开发外卖App界面。内容包括页面布局、导航栏自定义、搜索框实现、列表模块构建等,附完整代码示例。轻松掌握Scroll、List等组件使用技巧,提升HarmonyOS应用开发能力。
|
3月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
350 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
353 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
794 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
6月前
|
移动开发 前端开发 JavaScript
鸿蒙NEXT时代你所不知道的全平台跨端框架:CMP、Kuikly、Lynx、uni-app x等
本篇基于当前各大活跃的跨端框架的现状,对比当前它们的情况和未来的可能,帮助你在选择框架时更好理解它们的特点和差异。
688 0
|
7月前
|
IDE 开发工具 开发者
使用DevEcoStudio 开发、编译鸿蒙 NEXT_APP 以及使用中文插件
# 使用DevEcoStudio 开发、编译鸿蒙 NEXT_APP 以及使用中文插件 #鸿蒙开发工具 #DevEco Studio
718 1
HarmonyOS NEXT仓颉开发语言实战案例:电影App
周末好!本文分享使用仓颉语言重构ArkTS实现的电影App案例,对比两者在UI布局、组件写法及语法差异。内容包括页面结构、列表分组、分类切换与电影展示等。通过代码演示仓颉在HarmonyOS开发中的应用。##仓颉##ArkTS##HarmonyOS开发
|
4月前
|
JSON 自然语言处理 数据格式
使用Tabs选项卡组件快速搭建鸿蒙APP框架
ArkUI提供了很多布局组件,其中Tabs选项卡组件可以用于快速搭建鸿蒙APP框架,本文通过案例研究Tabs构建鸿蒙原生应用框架的方法和步骤。
442 5
使用Tabs选项卡组件快速搭建鸿蒙APP框架
|
7月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:健身App
本期分享一个健身App首页的布局实现,顶部采用Stack容器实现重叠背景与偏移效果,列表部分使用List结合Scroll实现可滚动内容。代码结构清晰,适合学习HarmonyOS布局技巧。
HarmonyOS NEXT仓颉开发语言实战案例:小而美的旅行App
本文分享了一个旅行App首页的设计与实现,使用List容器搭配Row、Column布局完成个人信息、功能列表及推荐模块的排版,详细展示了HarmonyOS下的界面构建技巧。

热门文章

最新文章