Bootstrap

Linux-Lab 入门:详细步骤分解

下载

下载特定开发板的软件包、内核、buildroot 以及 U-boot 的源码:

make source APP="bsp kernel root uboot"
# 或
make source APP=all
# 或
make source all

如果需要单独下载这些部分:

$ make bsp-source
make kernel-source
make root-source
make uboot-source

# 或

make source bsp
make source kernel
make source root
make source uboot

从 v0.5 开始,所有源代码下载在 Linux Lab 的  目录下,历史版本都直接放在 Linux Lab 根目录,请注意该区别。

检出

检出(checkout)您需要的 kernel 和 buildroot 版本:

make checkout APP="kernel root"

单独检出相关部分:

$ make kernel-checkout
make root-checkout

# 或

make checkout kernel
make checkout root

如果由于本地更改而导致检出不起作用,请保存更改并做清理以获取一个干净的环境:

make kernel-cleanup
make root-cleanup

# 或

make cleanup kernel
make cleanup root

以上操作也适用于 qemu 和 uboot。

打补丁

给开发板打补丁,补丁包的来源是存放在  和  路径下:

make kernel-patch

# 或

make patch kernel

配置

缺省配置

使用缺省配置(defconfig)配置 kernel 和 buildroot:

make defconfig APP="kernel root"

单独配置,缺省情况下使用  下的 defconfig:

make kernel-defconfig
make root-defconfig

# 或

make defconfig kernel
make defconfig root

使用特定的 defconfig 配置:

$ make B=raspi3
make kernel-defconfig KCFG=bcmrpi3_defconfig
make root-defconfig KCFG=raspberrypi3_64_defconfig

如果仅提供 defconfig 的名字,则搜索所在目录的次序首先是 ,然后是 buildroot, u-boot 和 linux-stable 各自的缺省配置路径 , 和 。

手动配置

make kernel-menuconfig
make root-menuconfig

# 或

make menuconfig kernel
make menuconfig root

使用旧的缺省配置

make kernel-olddefconfig
make root-olddefconfig
make root-olddefconfig
make uboot-olddefconfig

# 或

make olddefconfig kernel
make olddefconfig root
make olddefconfig uboot

编译

一起编译 kernel 和 buildroot:

make build APP="kernel root"

单独编译 kernel 和 buildroot:

make kernel-build  # make kernel
make root-build    # make root

# 或

make build kernel
make build root

从 v0.5 开始,所有构建结果存放在 Linux Lab 的  目录下,历史版本都放在  目录,请注意该区别。

保存

保存所有的配置以及 rootfs/kernel/dtb 的 image 文件:

make saveconfig APP="kernel root"
make save APP="kernel root"

保存配置和 image 文件到 :

$ make kernel-saveconfig
make root-saveconfig
make root-save
make kernel-save

# 或

make saveconfig kernel
make saveconfig root
make save kernel
make save root

启动

缺省情况下采用非图形界面的串口方式启动,如果要退出可以使用 , ,  或  命令。

make boot

图形方式启动 (如果要退出请使用 ):

make b=pc boot G=1 LINUX=v5.1
make b=versatilepb boot G=1 LINUX=v5.1
make b=g3beige boot G=1 LINUX=v5.1
make b=malta boot G=1 LINUX=v2.6.36
make b=vexpress-a9 boot G=1 LINUX=v4.6.7 // LINUX=v3.18.39 works too

注意:真正的图形化方式启动需要 LCD 和键盘驱动的支持,上述开发板可以完美支持 Linux 内核 5.1 版本的运行, 和  两款开发板支持 tty0 终端但不支持键盘输入。

 和  缺省情况下不支持 LCD,但对于最新的 qemu,可以通过在启动时指定  参数然后通过选择 “View” 菜单切换到串口终端,但这么做无法用于测试 LCD 和键盘驱动。我们可以通过  选项指定额外的 qemu 选项参数。

make b=vexpress-a9 CONSOLE=ttyAMA0 boot G=1 LINUX=v5.1
make b=raspi3 CONSOLE=ttyAMA0 XOPTS="-serial vc -serial vc" boot G=1 LINUX=v5.1

基于 curses 图形方式启动(这么做适合采用 bash/ssh 的登录方式,但不是对所有开发板都有效,退出时需要使用  或 )。

make b=pc boot G=2 LINUX=v4.6.7

使用预编译的内核、dtb 和 Rootfs 启动:

make boot PBK=1 PBD=1 PBR=1
# 或
make boot k=old d=old r=old
# 或
make boot kernel=old dtb=old root=old

使用新的内核、dtb 和 rootfs 启动:

make boot PBK=0 PBD=0 PBR=0
# 或
make boot k=new d=new r=new
# 或
make boot kernel=new dtb=new root=new

如果目标内核和 Uboot 不存在,重新编译一个之后再启动:

make boot BUILD="kernel uboot"

使用 Uboot 启动(目前仅测试并支持了  和  两款开发板):

make boot U=0

使用不同的 rootfs 启动(依赖于开发板的支持,启动后检查 )。

make boot ROOTDEV=/dev/ram      // support by all boards, basic boot method
make boot ROOTDEV=/dev/nfs      // depends on network driver, only raspi3 not work
make boot ROOTDEV=/dev/sda
make boot ROOTDEV=/dev/mmcblk0
make boot ROOTDEV=/dev/vda      // virtio based block device

使用额外的内核命令行参数启动(格式:):

make boot ROOTDEV=/dev/nfs XKCLI="init=/bin/bash"

列出支持的选项:

make list ROOTDEV
make list BOOTDEV
make list CCORI
make list NETDEV
make list LINUX
make list UBOOT
make list QEMU

使用  可以实现更多 ,例如:

make list features
make list modules
make list gcc