Magenta源代码笔记(1) —— 代码结构以及构建系统
来源:互联网 发布:淘宝女装店铺介绍? 编辑:程序博客网 时间:2024/06/07 23:33
Google今年新公开了以新内核Magenta为基础的Fuchsia操作系统,在代码量还在我可以承受的范围时,准备开始阅读Magenta的代码。
Google现在将代码托管在 https://fuchsia.googlesource.com/magenta
无奈网站在墙外,幸好Google在Github上提供了对应的镜像Repo https://github.com/fuchsia-mirror/magenta
有关Magenta内核的介绍在Google的Readme文档里可以找到。
代码结构以及构建系统
┣ kernel Magenta内核代码
┣ scripts 工具脚本
┣ system 用户空间代码
┗ third-party 第三方库代码
kernel目录中为Magenta内核的代码,Magenta是基于Google开发的lk内核修改过来的,查看lk的Repo,其内容与kernel目录中的结构基本一致
kernel
┣ app 内核空间应用
┣ arch 芯片架构适配代码(启动代码等)
┣ dev 设备系统
┣ include 头文件
┣ lib 内核所用库
┣ make 构建所需的mk文件
┣ platform 平台相关适配代码
┣ project 顶层项目配置文件
┣ target 目标相关适配代码
┗ top 内核顶层初始化代码
system目录为用户空间的代码
system
┣ private 私有头文件 (用户空间内核空间交互)
┣ public 公有头文件 (用户空间内核空间交互,如系统调用等)
┣ tools 用户空间调试以及构建使用的工具 (host运行)
┣ uapps 用户空间应用
┣ udev 用户空间设备驱动
┣ ulib 用户空间所用库
┗ utest 用户空间测试代码
third-party目录为第三方代码
现在该目录主要提供了用户空间使用的libc库musl-libc:https://www.musl-libc.org/
接下来关于Magenta的构建系统,沿用了lk代码的构建系统
makefile:
引入kernel/engine.mk
下面以magenta-qemu-arm64为例
kernel/project/magenta-qemu-arm64.mk:
test.mk:测试所依赖代码
user.mk:用户空间代码
qemu-virt-a53.mk:目标配置文件
kernel/project/target/qemu-virt-a53.mk:
kernel/target/qemu-virt/rules.mk:
kernel/platform/qemu-virt/rules.mk:
未完
Google现在将代码托管在 https://fuchsia.googlesource.com/magenta
无奈网站在墙外,幸好Google在Github上提供了对应的镜像Repo https://github.com/fuchsia-mirror/magenta
有关Magenta内核的介绍在Google的Readme文档里可以找到。
代码结构以及构建系统
┣ kernel Magenta内核代码
┣ scripts 工具脚本
┣ system 用户空间代码
┗ third-party 第三方库代码
kernel目录中为Magenta内核的代码,Magenta是基于Google开发的lk内核修改过来的,查看lk的Repo,其内容与kernel目录中的结构基本一致
kernel
┣ app 内核空间应用
┣ arch 芯片架构适配代码(启动代码等)
┣ dev 设备系统
┣ include 头文件
┣ lib 内核所用库
┣ make 构建所需的mk文件
┣ platform 平台相关适配代码
┣ project 顶层项目配置文件
┣ target 目标相关适配代码
┗ top 内核顶层初始化代码
system目录为用户空间的代码
system
┣ private 私有头文件 (用户空间内核空间交互)
┣ public 公有头文件 (用户空间内核空间交互,如系统调用等)
┣ tools 用户空间调试以及构建使用的工具 (host运行)
┣ uapps 用户空间应用
┣ udev 用户空间设备驱动
┣ ulib 用户空间所用库
┗ utest 用户空间测试代码
third-party目录为第三方代码
现在该目录主要提供了用户空间使用的libc库musl-libc:https://www.musl-libc.org/
接下来关于Magenta的构建系统,沿用了lk代码的构建系统
makefile:
引入kernel/engine.mk
LKROOT := kernel...$(MAKECMDGOALS) _top:@$(MAKE) -C $(LKMAKEROOT) --no-print-directory -rR -f $(LKROOT)/engine.mk $(addprefix -I,$(LKINC)) $(MAKECMDGOALS)kernel/engine.mk:按顺序引入project,platform,target目录中的mk文件
...-include project/$(PROJECT).mkifndef TARGET$(error couldn't find project or project doesn't define target)endifinclude target/$(TARGET)/rules.mkifndef PLATFORM$(error couldn't find target or target doesn't define platform)endifinclude platform/$(PLATFORM)/rules.mk$(info PROJECT = $(PROJECT))$(info PLATFORM = $(PLATFORM))$(info TARGET = $(TARGET))include arch/$(ARCH)/rules.mkinclude top/rules.mk...project名为make参数传入,对应project中的mk文件名
下面以magenta-qemu-arm64为例
kernel/project/magenta-qemu-arm64.mk:
EMBED_USER_BOOTFS:=trueMODULES +=include project/virtual/test.mkinclude project/virtual/user.mkinclude project/target/qemu-virt-a53.mk分别引入了三个mk文件
test.mk:测试所依赖代码
user.mk:用户空间代码
qemu-virt-a53.mk:目标配置文件
kernel/project/target/qemu-virt-a53.mk:
ARCH := arm64ARM_CPU := cortex-a53include project/target/qemu-virt.mkkernel/project/target/qemu-virt.mk:TARGET := qemu-virt主要指定了芯片的架构以及型号和目标的类型,从而可以导入对应的target的mk文件
kernel/target/qemu-virt/rules.mk:
LOCAL_DIR := $(GET_LOCAL_DIR)KERNEL_INCLUDES += \ $(LOCAL_DIR)/includePLATFORM := qemu-virt#include make/module.mk主要将target有关文件加入include路径,并且指定所使用的platform
kernel/platform/qemu-virt/rules.mk:
LOCAL_DIR := $(GET_LOCAL_DIR)MODULE := $(LOCAL_DIR)ifeq ($(ARCH),)ARCH := arm64endififeq ($(ARCH),arm64)ARM_CPU ?= cortex-a53endififeq ($(ARCH),arm)ARM_CPU ?= cortex-a15endifWITH_SMP ?= 1LK_HEAP_IMPLEMENTATION ?= cmpctmallocMODULE_SRCS += \ $(LOCAL_DIR)/debug.c \ $(LOCAL_DIR)/platform.c \ $(LOCAL_DIR)/secondary_boot.S \ $(LOCAL_DIR)/uart.cMEMBASE := 0x40000000MEMSIZE ?= 0x08000000 # 512MBKERNEL_LOAD_OFFSET := 0x10000 # 64kMODULE_DEPS += \ lib/cbuf \ lib/fdt \ dev/pcie \ dev/timer/arm_generic \ dev/interrupt/arm_gicv2mKERNEL_DEFINES += \ MEMBASE=$(MEMBASE) \ MEMSIZE=$(MEMSIZE) \ PLATFORM_SUPPORTS_PANIC_SHELL=1KERNEL_DEFINES += MMU_WITH_TRAMPOLINE=1 \LINKER_SCRIPT += \ $(BUILDDIR)/system-onesegment.ldinclude make/module.mkplatform为构建系统中最具象的一层,包括了引入了底层驱动代码(?),链接相关参数,和一些需要依赖的库。
未完
0 0
- Magenta源代码笔记(1) —— 代码结构以及构建系统
- Magenta源代码笔记(5) —— 系统调用
- Magenta源代码笔记(2) —— 线程调度器以及内核定时器
- Magenta源代码笔记(3) —— 内存管理
- Magenta源代码笔记(4) —— Dispatcher(以进程为例)
- 《第一行代码》笔记1——系统结构
- Magenta Demos Magenta 实战代码
- Android系统源代码编译—[1]搭建一个构建环境
- 知识库系统源代码——项目结构
- Android系统源代码编译—[3]准备构建
- Android系统源代码编译—[4]运行构建
- Android系统源代码编译—[5]构建内核
- Caffe学习笔记1-安装以及代码结构
- Caffe学习笔记1-安装以及代码结构
- Caffe学习笔记1-安装以及代码结构
- Storm系统架构以及代码结构学习
- 高通 android 源代码以及目标系统目录结构
- 高通 android 源代码以及目标系统目录结构
- python+scrapy+selenium爬虫
- 别再让C++头文件中出现“using namespace xxx;”
- 从相册选取图片并剪裁得一些方法
- tar命令各参数详解
- 当我们聊云灾备的时候,我们是在聊什么
- Magenta源代码笔记(1) —— 代码结构以及构建系统
- QT C++和HTML通信
- 串口通信的基本概念
- 如可查看计算机java安装的版本
- Android自定义View(进阶篇)
- i++ 和 i=i++和i=i+1和j=j++的细节问题
- JVM浅析
- Otto EventBus实践
- EJS 模板<%- 变量%> 与<%= 变量%>的区别