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.rhkb.cn/news/276718.html

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

相关文章

excel导入功能(适用于vue和react都可)

如图所示&#xff08;需求&#xff09;&#xff1a;点击导入excel后&#xff0c;数据自动新增到列表数据内 这里以vue3 andt 为例 template 标签内代码 &#xff1a; <a-uploadname"file":multiple"true":show-upload-list"false":customR…

iOS 腾讯Pag动画框架-实现PagView的截图功能

背景 产品想要一个首页的截图功能&#xff0c;一听这个功能&#xff0c;心想那还不简单&#xff0c;将父视图控件转换成图片保存就行了。按照这个思路实现&#xff0c;很快就打脸啦&#xff0c;首页的这些动画一个都没有截出来&#xff0c;就像消失啦似的。然后蠢蠢的将动画暂…

一周学会Django5 Python Web开发-Jinja3模版引擎-模板语法

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计37条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

【pycharm】如何将pacharm设置成中文

【pycharm】汉化教程——如何将pacharm设置成中文 1、打开pycharm 2、点击file 3、点击setting——Plugins——搜索Chinese——点击如下图图标进行下载 汉化后界面情况&#xff1a;

windows使用docker运行TP6使用swoole内置http服务

1&#xff0c;下载docker-Windows客户端 下载地址&#xff1a;https://www.docker.com/products/docker-desktop docker --version #查看docker版本 docker-compose --version #查看docker-compose版本 2&#xff0c;安装环境 使用一键安装包&#xff1a;https://gitee.com/yes…

量子遗传算法优化VMD参数,五种适应度函数任意切换,最小包络熵、样本熵、信息熵、排列熵、排列熵/互信息熵...

关于量子遗传算法&#xff0c;在众多文献均有应用。下面简述一下原理。 &#xff08;1&#xff09;量子比特编码 子遗传算法通过引入量子比特来完成基因的存储和表达。量子比特是量子信息中的概念&#xff0c;它与经典比特不同&#xff0c;是因为它可以在同一时刻处于两个状态的…

通天星CMSV6车载定位监控平台 SQL注入漏洞复现(XVE-2023-23744)

0x01 产品简介 通天星CMSV6车载定位监控平台拥有以位置服务、无线3G/4G视频传输、云存储服务为核心的研发团队,专注于为定位、无线视频终端产品提供平台服务,通天星CMSV6产品覆盖车载录像机、单兵录像机、网络监控摄像机、行驶记录仪等产品的视频综合平台。 0x02 漏洞概述 …

贪心算法(算法竞赛、蓝桥杯)--均分纸牌

1、B站视频链接&#xff1a;A30 贪心算法 P1031 [NOIP2002 提高组] 均分纸牌_哔哩哔哩_bilibili 题目链接&#xff1a;[NOIP2002 提高组] 均分纸牌 - 洛谷 #include <bits/stdc.h> using namespace std; int n,a[101],av,cnt;int main(){scanf("%d",&n);…

AWS云上面的k8s统一日志收集(Fluent Bit+EKS+CW)

目标 k8s上面的常见的统一日志方案是EFK&#xff0c;具体如下&#xff1a; E:elasticsearch;F:fluentd;K:kibana 这里我们变成了使用fluentd的AWS替代品Fluent Bit&#xff0c;直接将日志输出到CloudWatch组。不需要E和K了。不过&#xff0c;这样仅仅用于AWS EKS。 步骤 给…

DFS-验证二叉数98

给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1&#xff1a; 输入…

初识微信小程序之swiper和swiper-item的基本使用

在我还没接触到微信小程序之前&#xff0c;通常使用轮播要么手写或使用swiper插件去实现&#xff0c;当我接触到微信小程序之后&#xff0c;我看到了微信小程序的强大之处&#xff0c;让我为大家介绍一下吧&#xff01; swiper与swiper-item一起使用可以做轮播图 基本使用&…

运维自动化之——Ansible

目录 一、自动化运维 1、通过xshell实现自动化运维 2、Ansible简介 3、Ansible特点及优势 4、Ansible核心程序 5、Ansible工作原理及流程 6、部署Ansible自动化运维工具 7、Ansible常用模块 ①ansible命令模块 ②command模块 ③shell模块 ④cron模块 ⑤user模块 …

AntPathMatcher【Spring中提供的路径匹配器】

举个例子 我们要求所有以html结尾的访问&#xff0c;都放行 那我们只需要写出用AntPathMatcher判断访问url是否与/**/*.html匹配便可以知道结果

【NLP学习记录】One-Hot编码

1. One-Hot编码概念 one-hot编码的基本思想是将每个类别映射到一个向量&#xff0c;其中只有一个元素的值为1&#xff0c;其余元素的值为0。这样&#xff0c;每个类别之间相互独立&#xff0c;不存在顺序或距离关系。 举例&#xff1a;对于三个类别的情况&#xff0c;可以使用…

uni-app微信小程序上拉加载,下拉刷新

pages.json配置官网链接 onPullDownRefresh、onReachBottom函数跟生命周期同级 data() {return {orderList:[],total: null, //总共多少条数据page: 1,pageSize: 10,} }, onLoad() {}, mounted(){this.getInfo() }, methods:{getInfo(){API.getListxxx().then(res > {const…

JVM的工作流程

目录 1.JVM 简介 2.JVM 执行流程 3. JVM 运行时数据区 3.1 堆&#xff08;线程共享&#xff09; 3.3 本地方法栈&#xff08;线程私有&#xff09; 3.4 程序计数器&#xff08;线程私有&#xff09; 3.5 方法区&#xff08;线程共享&#xff09; 4.JVM 类加载 ① 类…

MM1: Methods, Analysis Insights from Multimodal LLM Pre-training

MM1: Methods, Analysis & Insights from Multimodal LLM Pre-training 相关链接&#xff1a;arxiv 关键字&#xff1a;多模态学习、大型语言模型、预训练、视觉语言连接、混合专家模型 摘要 本文讨论了构建高性能的多模态大型语言模型&#xff08;MLLMs&#xff09;。特别…

uploads-labs靶场(1-10关)

一、搭建环境: 下载upload-labs源代码 下载链接&#xff1a;https://codeload.github.com/c0ny1/upload-labs/zip/refs/heads/master 将压缩包解压后的文件名改为upload-labs&#xff0c;然后放入phpstudy\www目录下 二、关卡通关: 1、pass-01&#xff08;前端绕过&#xf…

(三)丶RabbitMQ的四种类型交换机

前言&#xff1a;四大交换机工作原理及实战应用 1.交换机的概念 交换机可以理解成具有路由表的路由程序&#xff0c;仅此而已。每个消息都有一个称为路由键&#xff08;routing key&#xff09;的属性&#xff0c;就是一个简单的字符串。最新版本的RabbitMQ有四种交换机类型&a…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Grid)

网格容器&#xff0c;由“行”和“列”分割的单元格所组成&#xff0c;通过指定“项目”所在的单元格做出各种各样的布局。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 仅支持GridItem…