8000 GitHub - chenyuxiangg/osz
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

chenyuxiangg/osz

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OSZ

取名为Z的操作系统,没有什么特殊的含义。

当前支持特性

  • 中断框架支持
  • mtime支持
  • ns16550 uart驱动支持
  • 多任务支持
  • 内存管理支持
  • 有且仅有一个外部依赖printf(已源码集成)
  • qemu-riscv Virt单板支持
  • ipc支持(当前仅支持event)
  • 抢占调度支持
  • shell命令行支持(支持自定义命令)
    • shell 支持上、下、左、右键
    • shell 支持tab补全/联想命令
    • shell 支持任意位置del字符

交叉编译工具链信息

代码仓目录下的 tools/riscv-unknown-elf.tar.gz 存放了可以直接用于 riscv32 编译的交叉编译工具链,工具链源码地址见这里,commit id为935b263c8ef7f250819c74aeb7736c87ad87ef2b,编译参数如下:

./configure --prefix=/home/zyzs/code/riscv_tool_chain/install --with-arch=rv32gc --with-abi=ilp32d --enable-default-pie --with-languages=c,c++ --with-cmodel=medany

编译及运行

clone该仓库,将riscv-unknown-elf.tar.gz压缩包解压到tools目录,然后执行下述命令即可编译运行:

cd build
./build.sh run

# 调试命令
./build.sh debug

已集成的第三方库

  1. 集成了嵌入式中最好的printf,实现文件直接拷贝到kernel/debug目录下(只有printf.cprintf.h);

编译框架

介绍

编译框架当前为分为三个组件,入口、公共部分及模块私有。 编译入口为build/Makefile,通过该文件中的$(TARGET)标签遍历$(MODULES)进行各模块的编译;公共部分为build/make/comm.mk以及build/make/module.mk,前者提供全局的路径变量的定义以及公用的一些Makefile宏,后者提供各模块编译依赖的公共部分;模块私有的部分需要在模块的顶层目录下新建Makefile文件,增加并按需修改如下模版即可:

include $(COMM_MK)

MODULE_NAME := 
MODULE := 

C_SRCS = $(wildcard *.c)
OBJS := $(patsubst %.c, %.o, $(C_SRCS))

LOCAL_FLAGS := 

include $(MODULE_MK)

增加一个源码组件

当增加的模块提供了源码,且需要编译源码时,定义为新增加一个源码组件,需要按照如下规则执行:

  1. 确认MODULE_NAME,可以用户自定义,但需要确保与build/config/osz.config中的配置OSZ_CFG_XXX中的XXX一致;
  2. 配置MODULE变量为lib$(MODULE_NAME).a;
  3. 确保待编译的文件已放置在C_SRCS变量中;
  4. 配置LOCAL_FLAGS,新增源文件编译依赖的头文件目录、宏定义、编译选项;
  5. 在入口Makefile文件中的MODULES变量中增加模块(模块顶层目录的相对路径);
  6. build/config/osz.confg文件中添加模块配置,即OSZ_CFG_XXX=y

增加一个库组件

当新增加的模块是一组不需要编译源文件(已经提供了.a)的静态库时,定义为新增加一个库组件,需要按照如下规则执行:

  1. C_SRCSLOCAL_FLAGS留空,且MODULE变量应该与MODULE_NAME变量相等。
  2. 组件的目录结构应该为:
    • G_OPENSOURCE_PATH(由build/comm.mk定义)/<组件名> 定义组件顶层目录;
    • G_OPENSOURCE_PATH(由build/comm.mk定义)/<组件名> 下应该包含includelibsrc三个目录,如果没有源码,则不需要src
  3. 参考 增加一个源码组件 一节中的5、6两步将组件添加到编译框架。

FAQ

  1. 当使用-g选项生成带调试信息的可执行文件时,链接脚本中不能对.debug_*这类段进行指定,应该保持默认;

参考信息

内核特性

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published
0