目录


BiscuitOS 基础环境部署


BiscuitOS 项目简介

BiscuitOS 项目是一个用于制作 Linux 0.x、1.x、2.6.x、3.x、4.x、2.6.x 通用精简操作系统,其目标是为开发者提供一套纯软件的 Qemu 实践平台 或者硬件 RaspberryPi 实践平台,让开发者能够便捷、简单、快速的 在各个版本上实践 Linux。更多 BiscuitOS 信息请范围下列网站:


BiscuitOS 硬件准备

由于项目构建基于 Ubuntu,因此需要准备一台运行 Ubuntu 14.04/16.04/18.04 的主机,主机需要保持网络的连通。


BiscuitOS 软件准备

开发者准好硬件设备之后,首先在 Ubuntu 上安装相应的开发工具,请参考下面文档, 其他 Linux 发行版与之类似:

基础环境搭建完毕之后,开发者从 GitHub 上获取 BiscuitOS 项目源码,使用如下命令:

git clone https://github.com/BiscuitOS/BiscuitOS.git --depth=1
cd BiscuitOS

BiscuitOS 源码下载完毕后,使用 BiscuitOS 自动部署功能,部署一个 Linux 2.6.x arm32 的开发部署,使用自动部署功能之后,BiscuitOS 项目会自动下载并部署 Linux 2.6.x arm32 所需的源码和编译工具等,可能需要一些时间,请保持网络的通畅. 开发者 参考下面命令进行部署:

cd BiscuitOS
make linux-2.6.x-arm32_defconfig
make
cd BiscuitOS/output/linux-2.6.x-arm32

成功执行之后,BiscuitOS 输出 Linux 2.6.x arm32 项目目录,以及对应内核的目录,并且 自动生成 BiscuitOS Linux 2.6.x arm32 用户手册 (README),开发者应该重点参考该 README.md.

 ____  _                _ _    ___  ____  
| __ )(_)___  ___ _   _(_) |_ / _ \/ ___|
|  _ \| / __|/ __| | | | | __| | | \___ \ 
| |_) | \__ \ (__| |_| | | |_| |_| |___) |
|____/|_|___/\___|\__,_|_|\__|\___/|____/ 

***********************************************
Output:
 BiscuitOS/output/linux-2.6.x-arm32

linux:
 BiscuitOS/output/linux-2.6.x-arm32/linux/linux 

README:
 BiscuitOS/output/linux-2.6.x-arm32/README.md 

***********************************************


BiscuitOS 内核部署

BiscuitOS 项目的目标就是为开发者提供一套便捷实践内核的平台,并且 BiscuitOS 支 持完整的内核开发,开发者请参考下列步骤进行开发:


Linux 内核配置

对于内核配置,根据 README.md 的提示,配置内核可以参考如下命令:

cd BiscuitOS/output/linux-2.6.x-arm32/linux/linux
make ARCH=arm clean
make ARCH=arm vexpress_defconfig
make ARCH=arm menuconfig

  [*] Block devices --->
        <*> RAM disk support
        (20480) Default RAM disk size (kbytes)

  File systems --->
        <*> Ext3 journalling file system support
        [*]   Ext3 extended attributes


Linux 内核编译

内核配置完毕之后,接下来就是编译内核,根据 README.md 里提供的命令进行编译, 具体命令如下:

cd BiscuitOS/output/linux-2.6.x-arm32/linux/linux
make ARCH=arm CROSS_COMPILE=BiscuitOS/output/linux-2.6.x-arm32/arm-linux/arm-linux/bin/arm-linux- -j4


Busybox/Rootfs 制作

为了使 BiscuitOS 能够运行,开发者需要为 BiscuitOS 准备运行必备的工具,BiscuitOS 默认使用 busybox 进行系统 rootfs 的构建,开发者可以参考如下命令进行构建:

cd BiscuitOS/output/linux-2.6.x-arm32/busybox/busybox
make clean
make menuconfig

LINUXP

选择 Busybox Settings —>

LINUXP

选择 Build Options —>

选中 Build BusyBox as a static binary (no shared libs),保存并退出。使用 如下命令编译 BusyBox

make CROSS_COMPILE=BiscuitOS/output/linux-2.6.x-arm32/arm-linux/arm-linux/bin/arm-linux- -j4

make CROSS_COMPILE=BiscuitOS/output/linux-2.6.x-arm32/arm-linux/arm-linux/bin/arm-linux- install

编译完上面的工具和 Linux 之后,运行前的最后一步就是制作一个可运 行的 Rootfs。开发者可以使用 README 中提供的命令进行制作,如下:

cd BiscuitOS/output/linux-2.6.x-arm32
./RunBiscuitOS.sh pack


BiscuitOS 基础使用

在准备完各个模块之后,开发者完成本节的内容之后,就可以运行一个完整的 BiscuitOS 系统. BiscuitOS 的运行很简单,通过提供 RunBiscuitOS.sh 脚本将涉及 的启动命令全部整理包含成精简的命令,开发者可以通过查看 RunBiscuitOS.sh 脚本 逻辑来研究 BiscuitOS 运行机理. BiscuitOS 的运行很简单,开发者执行使用如下命 令即可:

cd BiscuitOS/output/linux-2.6.x-arm32
./RunBiscuitOS.sh


BiscuitOS 驱动部署

BiscuitOS 支持 “BiscuitOS 驱动框架部署” 和 “内核驱动部署” 两种方式进行 Linux 驱动开发。”BiscuitOS 驱动框架部署” 是 BiscuitOS 提供的一套快速驱动开发框架. “内核驱动部署” 是标准 Linux 源码树下内核驱动开发框架。开发者可以根据需求选择 驱动开发方式.


BiscuitOS 驱动框架部署

BiscuitOS 以及完整支持驱动开发体系,并基于 Kbuild 编译系统,制作了一套 便捷的驱动开发环境,开发者可以参考如下步骤进行快速开发,本次以一个 Platform 驱动为例进行讲解。


Platform 源码获取

首先开发者应该准备基于 Linux 2.6.x arm32 开发环境,然后 使用如下命令获得 Platform 所需的开发环境:

cd BiscuitOS
make linux-2.6.x-arm32_defconfig
make menuconfig

选择 “Package —>” 并进入下一级菜单

选择 “Platform: Device Driver and Application”,并进入下一级菜单

设置 “platform Core Module —>” 为 “Y”。设置完毕之后, 保存并退出.


Platform 源码编译

Platform 的编译很简单,只需执行如下命令就可以快速编译:

make
cd BiscuitOS/output/linux-2.6.x-arm32/package/platform_core_module-0.0.1/
make prepare
make download
make
make install
make pack


Platform 模块安装

驱动的安装特别简单,使用如下命令:

cd BiscuitOS/output/linux-2.6.x-arm32/package/platform_core_module-0.0.1/
make install
make pack


Platform 模块使用

模块的使用也很简单,使用如下命令:

cd BiscuitOS/output/linux-2.6.x-arm32/
./RunBiscuitOS.sh

运行 BiscuitOS 之后,在 BiscuitOS 上使用如下命令:

cd lib/modules/2.6.x.0/extra/
insmod platform_core_module-0.0.1


通用驱动开发

通用驱动开发模式就是按标准的内核驱动开发方式,将驱动放到内核 源码树内或者源码树之外进行开发,这里以内核源码树内开发为例:


驱动源码

开发者首先准备一份驱动源码,可以操作如下源码,本节中使用一份 misc 驱动,并命名为 BiscuitOS_drv.c,具体源码如下:


驱动安置

开发者准备好源码之后,接着将源码添加到内核源码树。开发者在内核源码树 目录下,找到 drivers 目录,然后在 drivers 目录下创建一个名为 BiscuitOS 的目录,然后将源码 BiscuitOS_drv.c 放入到 BiscuitOS 目录下。接着添加 Kconfig 和 Makefile 文件,具体内容如下:

mkdir -p BiscuitOS/output/linux-2.6.x-arm32/linux/linux/drivers/BiscuitOS
Kconfig

Makefile

接着修改内核源码树 drivers 目录下的 Kconfig,在文件的适当位置加上如下代码:

source "drivers/BiscuitOS/Kconfig"

然后修改内核源码树 drivers 目录下的 Makefile,在文件的末尾上加上如下代码:

obj-$(CONFIG_BISCUITOS_DRV)  += BiscuitOS/


驱动配置

准备好所需的文件之后,接下来进行驱动在内核源码树中的配置,使用如下命令:

cd BiscuitOS/output/linux-2.6.x-arm32/linux/linux
make ARCH=arm menuconfig

LINUXP

首先在目录中找到 Device Driver —> 回车并进入其中。

LINUXP

接着在目录中找到 BiscuitOS Driver —> 按 M 选中并按回车键进入。

LINUXP

最后按 M 键选中 BiscuitOS mis driver,保存并退出内核配置


驱动编译

配置完驱动之后,接下来将编译驱动。开发者使用如下命令编译驱动:

make ARCH=arm CROSS_COMPILE=BiscuitOS/output/linux-2.6.x-arm32/arm-linux/arm-linux/bin/arm-linux- modules -j4
make ARCH=arm INSTALL_MOD_PATH=BiscuitOS/output/linux-2.6.x-arm32/rootfs/rootfs/ modules_install

从编译的 log 可以看出 BiscuitOS_drv.c 已经被编译进内核。

LINUXP


驱动安装

驱动安装制作很简单,请参考如下命令:

cd BiscuitOS/output/linux-2.6.x-arm32
./RunBiscuitOS.sh pack

驱动使用

模块的使用也很简单,使用如下命令:

cd BiscuitOS/output/linux-2.6.x-arm32/
./RunBiscuitOS.sh

运行 BiscuitOS 之后,在 BiscuitOS 上使用如下命令:

cd lib/modules/2.6.x.0/kernel/driver/BiscuitOS/
insmod misc.ko


驱动实践

BiscuitOS 提供了丰富的驱动开发教程,开发者可以参考如下文档:


BiscuitOS 应用程序部署

BiscuitOS 目前提供了一套便捷的应用程序开发框架,开发者可以使用这套框架快速实 践应用程序,开发者可以参考如下步骤进行应用程序实践, 本次以一个 Application Demo 为例进行讲解。


Platform 源码获取

首先开发者应该准备基于 Linux 2.6.x arm32 开发环境,然后使用如下命令获得应用程序所 需的开发环境:

cd BiscuitOS
make linux-2.6.x-arm32_defconfig
make menuconfig

选择 “Package —>” 并进入下一级菜单

选择 “Module: Linux Device Driver”,并进入下一级菜单

设置 “Application Project —>” 为 “Y”。设置完毕之后,保存并退出.


应用程序源码编译

应用程序的编译很简单,只需执行如下命令就可以快速编译:

make
cd BiscuitOS/output/linux-2.6.x-arm32/package/Application_project-0.0.1
make prepare
make download
make
make install
make pack


应用程序安装

应用程序的安装特别简单,使用如下命令:

cd BiscuitOS/output/linux-2.6.x-arm32/package/platform_core_module-0.0.1/
make install
make pack


应用程序使用

应用程序的使用也很简单,使用如下命令:

cd BiscuitOS/output/linux-2.6.x-arm32/
./RunBiscuitOS.sh

运行 BiscuitOS 之后,在 BiscuitOS 上使用如下命令:

Application_project-0.0.1


BiscuitOS 调试部署

BiscuitOS 的 Linux 内核也支持多种调试,其中比较重要的方式就是 GDB 调试,开 发者可以使用 GDB 对内核进行单步调试,具体步骤如下:

首先使用 QEMU 的调试工具,将内核挂起等待调试,使用如下命令:

cd BiscuitOS/output/linux-2.6.x-arm32
./RunBiscuitOS.sh debug

接着在另外一个终端中输入如下命令,作为 gdb server

BiscuitOS/output/linux-2.6.x-arm32/arm-linux/arm-linux/bin/arm-linux-gdb BiscuitOS/output/linux-2.6.x-arm32/linux/linux/vmlinux

输入以上命令之后,在第二个终端中,会进入 gdb 模式,此时以此输入一下命名进行 gdb 挂载:

(gdb) target remote :1234

然后开发者可以根据自己的需求进行内核调试,比如在 start_kernel 出添加 一个断点调试,如下:

(gdb) b start_kernel
(gdb) c
(gdb) list
(gdb) info reg

更多内核调试,请查考文档:


附录

BiscuitOS Home

BiscuitOS Catalogue

Linux Kernel

Bootlin: Elixir Cross Referencer

捐赠一下吧 🙂

MMU