首页 > 其他分享 >自制x86 BOOTLADER开发笔记(1)——— 开发环境配置

自制x86 BOOTLADER开发笔记(1)——— 开发环境配置

时间:2023-10-28 18:14:53浏览次数:35  
标签:GCC x86 交叉 -- BOOTLADER 编译器 开发 内核

前言

数年前,出于对于操作系统内核的好奇和兴趣,看了一些自制内核资料和教程,断断续续地也写了一个简单的的玩具内核。
在学习的过程中,往往第一步遇到的问题就是内核的加载和系统的引导,发现不少教程都使用grub等现成的工具直接完成这一步骤,这样能快速的完成读取硬盘、加载内核文件、探测内存等这些dirty work,让初学者快速进入到内核开发的学习中,但是却使得这些过程对我们始终蒙上了一层神秘的面纱。
想必做出自己写系统内核这个决定的人都对于系统底层的运行原理有着浓厚兴趣,对于bootlader的原理,一样也会想进行了解,因此尝试不使用grub等工具,从零开始开发了一个简易的bootloader,学习相关原理的同时,也整理下开发流程中遇到的问题,做一个记录。

项目地址:https://github.com/basic60/ARCUS ,由于项目中的内核部分代码使用了hurlex内核的代码和linux内核的代码,因此项目代码将同样以GPL-2.0协议发布。

开发环境配置

Linux下构建交叉编译器

在正式开始开发之前,首先要做的就是先配置好开发环境,开发本项目内核所需要的工具只有编译器和用于运行内核的虚拟机而已。本内核采用汇编和C、C++编写,因此我们需要一个汇编器和C++的交叉编译器。

为什么我们需要一个交叉编译器?交叉编译器是在某个系统平台下可以产生另一个系统平台的可执行文件的编译器。我们的开发的内核当然是“另外”一个平台,因此需要交叉编译器来编译我们的代码。构建的内容包含了GCC和Binutils,GCC中有我们要使用的编译器,Binutils中有ar,ld,objdump,readelf等工具。

Linux下安装如下工具:

  • GCC (existing release you wish to replace), or another system C compiler
  • G++ (if building a version of GCC >= 4.8.0), or another system C++ compiler
  • Make
  • Bison
  • Flex
  • GMP
  • MPFR
  • MPC
  • Texinfo
  • GCC和Binutils的源代码

下载GCC和Binutils的源代码。可以从GCC的官方镜像Binutils的官方镜像下载。不过国内访问比较慢,推荐从中科大镜像下载。准备完成后执行以下命令:

export PREFIX="$HOME/opt/cross"
export TARGET=x86_64-elf
export PATH="$PREFIX/bin:$PATH"

其中TARGET描述了交叉编译器的目标三元组(Target Triplet),target triple是一个交叉编译器的术语,用于描述交叉编译的目标代码所运行的平台。格式为 <arch><sub>-<vendor>-<sys>-<abi>:

  • arch = x86_64, i386, arm, thumb, mips, etc.
  • sub = for ex. on ARM: v5, v6m, v7a, v7m, etc.
  • vendor = pc, apple, nvidia, ibm, etc.
  • sys = none, linux, win32, darwin, cuda, etc.
  • abi = eabi, gnu, android, macho, elf, etc.

本项目使用的Traget Triple为“x86_64-elf”,vender和sys都进行了忽略,构建系统会自动将缺失的参数推到为unkown或none,我们的目标是开发一个64位的内核,x86_64指明平台和elf指明abi就足够了。

构建Binutils

在home目录下建立一个src文件夹(当然也可以在其他的目录下),然后把binutils的代码解压到src目录中,执行以下命令:

cd $HOME/src
  
mkdir build-binutils
cd build-binutils
../binutils-x.y.z/configure --target=$TARGET --prefix="$PREFIX" --with-sysroot --disable-nls --disable-werror
make
make install

构建GCC

把GCC的代码同样解压到src目录中,执行以下命令:

cd $HOME/src
  
# The $PREFIX/bin dir _must_ be in the PATH. We did that above.
which -- $TARGET-as || echo $TARGET-as is not in the PATH
  
mkdir build-gcc
cd build-gcc
../gcc-x.y.z/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --enable-languages=c,c++ --without-headers
make all-gcc
make all-target-libgcc
make install-gcc
make install-target-libgcc

macos下安装交叉编译器

macos下可以选择和linux下一样自己下载源码编译,或者直接brew安装即可,非常方便

brew install x86_64-elf-gcc
brew install x86_64-elf-binutils

使用交叉编译器

直接使用交叉编译器的绝对路径。

$HOME/opt/cross/bin/$TARGET-gcc --version

当然你也可以自己把交叉编译器的路径加到环境变量里,这里不做赘述。

安装虚拟机

这里选择了qemu,下载安装最新版即可。

引用

  1. https://wiki.osdev.org/GCC_Cross-Compiler

  2. https://wiki.osdev.org/Target_Triplet

  3. https://clang.llvm.org/docs/CrossCompilation.html#target-triple

标签:GCC,x86,交叉,--,BOOTLADER,编译器,开发,内核
From: https://www.cnblogs.com/basic60/p/12542241.html

相关文章

  • 基于jquery+html开发的json格式校验工具
    json简介JSON是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLanguage,StandardECMA-2623rdEdition-December1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++......
  • 从零开始:开发直播商城APP的技术指南
    时下,直播商城APP已经成了线上购物、电子商务的核心组成,本文将为您提供一个全面的技术指南,帮助您从零开始开发一个直播商城APP。我们将涵盖所有关键方面,包括技术堆栈、功能模块、用户体验和安全性。第一部分:技术堆栈的选择1.移动平台:您可以选择iOS和Android平台开发应用,使用Swift或O......
  • C++_计算机应用开发流程
    开发流程需求-痛点-不满点-构成开发需求需求排期-设计原型开发-编译-测试-发布-安装RedHat(RedhatPackageManager)的包管理规范进行打包,获取到相应的软件RPM发布包,然后使用rpm命令安装makeautotools的工具集打包的。这个工具集包含autoconf、automake等工具......
  • 开发直播商城APP:技术要点和最佳实践
    在当今数字时代,直播商城APP正变得越来越受欢迎,成为了吸引消费者和促进销售的强大工具。这篇文章将探讨开发直播商城APP的技术要点和最佳实践,为开发者提供有价值的指导。第一部分:项目准备1.1定义项目目标在开始开发直播商城APP之前,首先需要明确定义项目的目标。这包括确定目标受众、......
  • FreeSWITCH添加自定义endpoint之api及app开发
    操作系统:CentOS7.6_x64FreeSWITCH版本:1.10.9之前写过FreeSWITCH添加自定义endpoint的文章,今天整理下api及app开发的笔记。历史文章可参考如下链接:FreeSWITCH添加自定义endpointFreeSWITCH添加自定义endpoint之媒体交互一、常用函数介绍这里列举下开发过程中常用的函数。1......
  • 【Dw 网页编辑开发工具】Dreamweaver CC2018 Mac中文汉化版
    Dreamweavercc2018mac中文汉化版是Adobe公司开发的一款专门用于macOS10.11或更高系统的网页编辑开发工具,也是当前最流行、最为广泛使用的网站开发软件,大家对这款软件应该都有听说过吧,毕竟该软件在行业中的知名度非常高,并且它的编辑功能也是众所周知。软件地址:看置顶贴软件特色:1......
  • GCC嵌入式开发
    1.编译器和IDE介绍最早刚入门单片机开发的时候,用的最多的就是KEIL开发,但是随着现在的编辑软件不断丰富,类似于KEIL这种偏上世纪的界面编写代码的时候已经十分不优雅了。而仔细刨析下KEIL可以发现,KEIL主要是由一个名为ARMCC的编译器搭建起来的IDE(以下KEIL主要已MDK-ARM说明,C51版本......
  • Java提升技术,进阶为高级开发和架构师的路线
    简介Java怎样提升技术?怎样进阶为高级开发和架构师?本文介绍靠谱的成长路线。首先点明,只写业务代码是无法成长技术的。提升技术的两个方法是:有技术大佬带有技术大佬的资料本文介绍靠谱的技术进阶资料,让你比其他人更有竞争力!Java设计模式实战链接:这里用生活例子帮助理解模式的思维,用实......
  • Java提升技术,进阶为高级开发和架构师的路线
    ​ 原文网址:Java提升技术,进阶为高级开发和架构师的路线-CSDN博客简介Java怎样提升技术?怎样进阶为高级开发和架构师?本文介绍靠谱的成长路线。首先点明,只写业务代码是无法成长技术的。提升技术的两个方法是:有技术大佬带有技术大佬的资料本文介绍靠谱的技术进阶资料,让你比......
  • c# winfom从0学习开发OA、BPM工作流程与自定义表单系统(十三)新建工作
     1,新建一个工作 2,填写表单 3,当时表单设置的可写字段,在这里就体现出来了,这里设置的第一个节点开始是字段全部可写的,其他节点只能看不能写 4,转交下一步工作,也就是我们流程图连线箭头指向的节点 5,确定转交下一步工作 6,需要登录张三的账号,去代办工作里查看有没有需......