鸿蒙移植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月前
mpvue踩坑-未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译
mpvue踩坑-未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译
48 0
|
1月前
|
Perl
pod spec lint编译时报The 'Pods-App' target has transitive dependencies that include static binaries错误问题
pod spec lint编译时报The 'Pods-App' target has transitive dependencies that include static binaries错误问题
25 1
|
1月前
|
移动开发 jenkins 持续交付
jenkins编译H5做的android端编译卫士app记录
jenkins编译H5做的android端编译卫士app记录
21 0
|
1月前
|
开发框架 前端开发 算法
【Qt App 编译 】Qt Cmake 资源文件的加载:如何使用 CMakeLists.txt 文件和资源文件
【Qt App 编译 】Qt Cmake 资源文件的加载:如何使用 CMakeLists.txt 文件和资源文件
76 0
|
1月前
|
人工智能 安全 开发者
中国移动APP启动鸿蒙原生应用开发,鸿蒙生态迎来通信领域民生应用
近日,在“鸿蒙生态全面合作签约暨开发启动仪式“上,中国移动通信有限公司在线营销服务中心宣布将与鸿蒙生态在技术互补、成果共享、商业共赢等方向进行合作,以共同推动鸿蒙智能化的移动开放生态业务发展,并正式启动中国移动APP鸿蒙原生应用及元服务开发。
|
1月前
|
存储 前端开发 IDE
【华为鸿蒙系统学习】- 如何利用鸿蒙系统进行App项目开发|自学篇
【华为鸿蒙系统学习】- 如何利用鸿蒙系统进行App项目开发|自学篇
126 0
|
1月前
|
人工智能 JavaScript 物联网
极智AI | 全志XR806 OpenHarmony鸿蒙系统固件编译
大家好,我是极智视界,本教程详细记录了全志 XR806 OpenHarmony 鸿蒙系统固件编译的方法。
56 0
|
1月前
|
运维 物联网 开发者
蚂蚁集团mPaaS平台与华为达成合作 加速上千家App“鸿蒙化”进程
11月23日,蚂蚁集团数字科技事业群旗下mPaaS与华为举行鸿蒙合作签约仪式,双方宣布将在鸿蒙产业创新、技术应用、商业发展等方面展开深入合作。随着mPaaS完成鸿蒙系统适配,将进一步丰富政务民生应用的国产系统兼容性,使更多伙伴、开发者和用户从中获益,并更好促进移动应用生态的繁荣及移动端体验的升级。
221 0
|
XML 监控 算法
深入探索编译插桩(二.app打包编译)
现如今随着组件化, 插件化框架以及热修复,AOP编程等高级用法的新起,不得不驱使大家去了解更加底层的原理,上一篇文章笔者介绍了关于JVM字节码的理解,这篇文章笔者就来讲解下我们apk从编译到安装的过程。
|
Shell Python
鸿蒙移植i.mx6ull(十二) 根文件系统
鸿蒙移植i.mx6ull(十二) 根文件系统
144 0
鸿蒙移植i.mx6ull(十二) 根文件系统