002——编译鸿蒙(Liteos -a)

目录

一、鸿蒙是什么

二、Kconfig

2.1 概述

2.2 编译器

2.3 make使用


本文章引用了很多韦东山老师的教程内容,算是我学习过程中的笔记吧。如果侵权请联系我。

一、鸿蒙是什么

这里我补充一下对鸿蒙的描述

        这张图片是鸿蒙发布时使用的,鸿蒙是一个很大的东西但是看起来他和linux差不多,其实内核和操作系统是两个东西,或者说他们是包含关系,内核是操作系统的一部分。这个在一年前我学linux时写文章就有提到过。鸿蒙的内核可以是linux也可以是liteos,这里沿用了ARM架构的划分根据芯片的电路复杂程度划分成了a和m两个级别。底层可能不太一样,因为linux是宏内核,驱动是内核的一部分。所以我们经常要插入驱动模块。在很久以前linux连插入功能都没有,只能重新编译然后重启。鸿蒙用的是微内核,把驱动分离出来了有个驱动子系统。在向上就是服务框架了,linux也是各种server思想上是差不多的。服务上就是用户可编辑的应用层。概念很大,但是这里的每个点都需要开发人员一起去优化。可做的东西还挺多的。

        随着科技发展现在纯m核的芯片性能也很强a和m的界限变得很模糊,我现在有个疑问就是a和m的本质区别是什么。

        我在韦东山老师的社区也发了。

m和a的区别到底在哪,或者说mcu和soc的界限在哪 - 嵌入式Linux开发 - 嵌入式开发问答社区

        鸿蒙的liteos-a没有linux那么强大,它属于RTOS的范畴,小,启动快速,非常适合用在嵌入式领域。后面发展前景也不错,所以我毕设也选的它。不过工作量评估错误,现在有做不完的风险了。

鸿蒙IDE分为南向和北向,北向指APP南向是内核

下面是APP开发的插件,基于vscode的

华为集成开发环境IDE DevEco Device Tool下载 | HarmonyOS设备开发

二、Kconfig

2.1 概述

        所以内核只要支持menuconfig都是使用的Kconfig,可以从一下途径获取资料。

任一个Linux内核的Documentation\kbuild\kconfig-language.rst

https://www.rt-thread.org/document/site/programming-manual/kconfig/kconfig/

        链接是RT-thread的开发指南,其实RT-thread也是个很先进的RTOS,而且是国产的。年轻人总是有孜孜不倦的创造力。老的操作系统由于其附带资源太多已经难以调转研发方向(这里应该有个很贴切的成语,我忘记了叫什么,哈哈文盲了。)RT-thread支持命令行,smart版本还支持用户态。由于Linux的成功性和当前世界主流程序员大佬的编程风格都喜欢命令行所以现在很多新的系统都是模仿linux来做的。(用着确实舒服了,而且适应起来也很快)

cp  tools/build/config/debug/imx6ull_clang.config .config   // 配置

make clean      // 先清除一下,否则会提示错误

make  -j  8     // 编译内核,可以得到out/imx6ull/liteos.bin

make  rootfs    // 编译根文件系统,可以得到rootfs.img

cp  out/imx6ull/rootfs.img out/imx6ull/rootfs.jffs2 // 改个名易辨认,烧写工具使用rootfs.jffs2

完整编译过程

内核的配置包括架构、芯片公司、芯片型号、板卡、硬件的版本。

因为可以用图形化配置我们试试都能配置什么

执行命令make menuconfig

可选的东西很多

我们可以对比一下linux的,少了很多东西因为驱动是分离的所以这里修改的只是原语上面那层

        回到liteos的编译这里可以选编译器,我们linux编译器这里是直接指定一个字符串的可选更丰富一些。 

可以选单片机型号

这里是韦东山老师移植的时候加的,正常只支持海思的芯片顶多加点RK的

还可以选GIC的版本,但是说实话我不知道这个GIC是不是指的中断控制器

还可以启动一些内核的特性

driver这里只到总线这层没具体的设备,linux的还支持具体设备选择。期待进一步丰富

在之前学习linux我就有说过这些所有的menuconfig图形化可配置的项都来源于.config这个文件

每个菜单的具体描述都在Kconfig这个文件中

具体语法可以看韦东山老师的网站提供的文档。解释很详细。这里我就不赘述了。

后面毕设做完有时间的话出一期相关语法的学习

2.2 编译器

        编译最常用的肯定就是gcc+make了,我的hardware simuliation项目搭建环境的时候演示过,代码在csdn我以前发布的文章里。视频B站有。讲解过程就简化一下咯windows的gcc环境我就不安啦。

简单复习一下编译过程和gcc使用方法

其实编译器比操作系统更有技术深度,只是复杂度没操作系统高。

一个c/c++文件要经过预处理、编译、汇编和链接才能变成可执行文件。

(1)预处理 C/C++源文件中,以“#”开头的命令被称为预处理命令,如包含命令“#include”、宏定义命令“#define”、条件编译命令“#if”、“#ifdef”等。预处理就是将要包含(include)的文件插入原文件中、将宏定义展开、根据条件编译命令选择要使用的代码,最后将这些东西输出到一个“.i”文件中等待进一步处理。

(2)编译 编译就是把C/C++代码(比如上述的“.i”文件)“翻译”成汇编代码。

(3)汇编 汇编就是将第二步输出的汇编代码翻译成符合一定格式的机器代码,在Linux系统上一般表现为ELF目标文件(OBJ文件)。“反汇编”是指将机器代码转换为汇编代码,这在调试程序时常常用到。

(4)链接 链接就是将上步生成的OBJ文件和系统库的OBJ文件、库文件链接起来,最终生成了可以在特定平台运行的可执行文件。

hello.c(预处理)->hello.i(编译)->hello.s(汇编)->hello.o(链接)->hello

echo 'main(){}'| gcc -E -v -  // 它会列出头文件目录、库目录(LIBRARY_PATH)

2.3 make使用

我写过好多文章大家可以参考下,也可以参考我的另一个项目写的

http://t.csdnimg.cn/z1VVj

http://t.csdnimg.cn/qDNu4

【002-编译框架搭建】 https://www.bilibili.com/video/BV1mN4y177mH/?share_source=copy_web&vd_source=14a18fc17fc55c8c188a7883c6a4c42e

---------------------------------------------------------------------------------------------------------------------------------

最近在移植有好多问题想交流一下感兴趣的同学可以一起:814096189

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/542250.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探讨NLP对行业大量数据信息抽取的技术实现

在本文中,为了实现高效的信息抽取,我们采用了一个自主研发的多模态AI的大模型NLP平台。 这个平台的使用过程分为以下几个步骤: 数据收集:我们收集了与项目相关的100条数据样本,这些样本涵盖了各种商品描述&#xff0c…

k8s部署hadoop

(作者:陈玓玏) 配置和模板参考helm仓库:https://artifacthub.io/packages/helm/apache-hadoop-helm/hadoop 先通过以下命令生成yaml文件: helm template hadoop pfisterer-hadoop/hadoop > hadoop.yaml用kube…

酷开科技以酷开系统的力量让电视机“活”起来

让用户回归电视的绝不会是因为电视机本身,而是电视系统的内容和交互的形式。酷开科技以系统的力量让电视机“活”起来。对于许多人来说,观看电影是一种享受、一种放松、一种逃避现实的方式。而现在,酷开科技作为行业内领军企业,为…

在react中使用tailwindcss

安装tailwind css npm i -D tailwindcssnpm:tailwindcss/postcss7-compat postcss^7 autoprefixer^9安装 CRACO 由于 Create React App 不能让您覆盖原生的 PostCSS 配置,所以我们还需要安装 CRACO 才能配置 Tailwind。 npm install craco/craco配置CRACO 在项目根…

Unity PS5开发 天坑篇 之 DEVKit环境部署与系统升级02

上一篇各位大神们已经收到了SONY官方免费寄送的PS5开发机与测试机,恭喜大家成为SONY的开发者, 本篇继续PS5开发机的部署与开发套件使用。 一, PC安装PS5 SDK与系统升级 1. PC/PS5 SDK Manager下载安装包 登录开发者账号后,Development->Resources&a…

基于有限状态机开发健壮的Nodejs/TCP客户端

有限状态机是一种数学计算模型,它描述了在任何给定时间只能处于一种状态的系统的行为。形式上,有限状态机有五个部分: 初始状态值 (initial state)有限的一组状态 (states)有限的一组事件 (events)由事件驱动的一组状态转移关系 (transition…

实现elasticsearch和数据库的数据同步

1. 数据同步 elasticsearch中的酒店数据来自于mysql数据库,因此mysql数据发生改变时,elasticsearch也必须跟着改变,这个就是elasticsearch与mysql之间的数据同步。 1.1. 思路分析 常见的数据同步方案有三种: 同步调用 异步通知…

微信小程序--分享如何与ibeacon蓝牙信标建立联系

ibeacon蓝牙设备 iBeacon是苹果公司2013年9月发布的移动设备用OS(iOS7)上配备的新功能。其工作方式是,配备有 低功耗蓝牙(BLE)通信功能的设备使用BLE技术向周围发送自己特有的ID,接收到该ID的应用软件会根…

2 .Gen<I>Cam模块介绍

模块组成:GenApi,SFNC,GenTL,GenDC,GenCP。 首先让我来看下 GenTL (Transport Layer) GenApi( sometimes simply called the GenICam Standard) 传统相机应用程序二次开发,是基于相机厂家提供的sdk。使用…

操作系统(一)

操作系统 一、操作系统的四个特性 并发性:并发性是指两个或多个时间在同一时间间隔发生,并发和并行是两个相似的概念,并行是指两个或多个事件在同一时刻发生。进程在宏观上并行,微观上串行 2.共享性:** 由于操作系统…

Spring Transactional注解失效的几种典型场景及解决办法

1.注解的方法不是用public修饰 Service public class UserService {Transactionalprivate void add(UserModel userModel) {saveData(userModel);updateData(userModel);} }我们可以看到add方法的访问权限被定义成了private,这样会导致事务失效,spring要…

(二)丶RabbitMQ的六大核心

一丶什么是MQ Message Queue(消息队列)简称MQ,是一种应用程序对应用程序的消息通信机制。在MQ中,消息以队列形式存储,以便于异步传输,在MQ中,发布者(生产者)将消息放入队列&#xff…