下载
下载特定开发板的软件包、内核、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 的 src/
目录下,历史版本都直接放在 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。
打补丁
给开发板打补丁,补丁包的来源是存放在 boards/<BOARD>/bsp/patch/linux
和 src/patch/linux/
路径下:
make kernel-patch
# 或
make patch kernel
复制代码
配置
缺省配置
使用缺省配置(defconfig)配置 kernel 和 buildroot:
make defconfig APP="kernel root"
复制代码
单独配置,缺省情况下使用 boards/<BOARD>/bsp/
下的 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 的名字,则搜索所在目录的次序首先是 boards/<BOARD>
,然后是 buildroot, u-boot 和 linux-stable 各自的缺省配置路径 src/buildroot/configs
,src/u-boot/configs
和 src/linux-stable/arch/<ARCH>/configs
。
手动配置
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 的 build/
目录下,历史版本都放在 output/
目录,请注意该区别。
保存
保存所有的配置以及 rootfs/kernel/dtb 的 image 文件:
make saveconfig APP="kernel root"
make save APP="kernel root"
复制代码
保存配置和 image 文件到 boards/<BOARD>/bsp/
:
$ make kernel-saveconfig
make root-saveconfig
make root-save
make kernel-save
# 或
make saveconfig kernel
make saveconfig root
make save kernel
make save root
复制代码
启动
缺省情况下采用非图形界面的串口方式启动,如果要退出可以使用 CTRL+a x
, poweroff
, reboot
或 pkill qemu
命令。
图形方式启动 (如果要退出请使用 CTRL+ALT+2 quit
):
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 版本的运行,raspi3
和 malta
两款开发板支持 tty0 终端但不支持键盘输入。
vexpress-a9
和 virt
缺省情况下不支持 LCD,但对于最新的 qemu,可以通过在启动时指定 G=1
参数然后通过选择 “View” 菜单切换到串口终端,但这么做无法用于测试 LCD 和键盘驱动。我们可以通过 XOPTS
选项指定额外的 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 的登录方式,但不是对所有开发板都有效,退出时需要使用 ESC+2 quit
或 ALT+2 quit
)。
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 启动(目前仅测试并支持了 versatilepb
和 vexpress-a9
两款开发板):
使用不同的 rootfs 启动(依赖于开发板的支持,启动后检查 /dev/
)。
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
复制代码
使用额外的内核命令行参数启动(格式:XKCLI = eXtra Kernel Command LIne
):
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
复制代码
使用 list <xxx>
可以实现更多 <xxx>-list
,例如:
make list features
make list modules
make list gcc
复制代码
评论