写点什么

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

用户头像
贾献华
关注
发布于: 2021 年 02 月 03 日
Linux-Lab 入门:详细步骤分解

下载


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


make source APP="bsp kernel root uboot"# 或make source APP=all# 或make source all
复制代码

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


$ make bsp-sourcemake kernel-sourcemake root-sourcemake uboot-source
# 或
make source bspmake source kernelmake source rootmake source uboot
复制代码

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


检出


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


make checkout APP="kernel root"
复制代码

单独检出相关部分:


$ make kernel-checkoutmake root-checkout
# 或
make checkout kernelmake checkout root
复制代码

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


make kernel-cleanupmake root-cleanup
# 或
make cleanup kernelmake 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-defconfigmake root-defconfig
# 或
make defconfig kernelmake defconfig root
复制代码

使用特定的 defconfig 配置:


$ make B=raspi3make kernel-defconfig KCFG=bcmrpi3_defconfigmake root-defconfig KCFG=raspberrypi3_64_defconfig
复制代码

如果仅提供 defconfig 的名字,则搜索所在目录的次序首先是 boards/<BOARD>,然后是 buildroot, u-boot 和 linux-stable 各自的缺省配置路径 src/buildroot/configssrc/u-boot/configs 和 src/linux-stable/arch/<ARCH>/configs


手动配置


make kernel-menuconfigmake root-menuconfig
# 或
make menuconfig kernelmake menuconfig root
复制代码

使用旧的缺省配置


make kernel-olddefconfigmake root-olddefconfigmake root-olddefconfigmake uboot-olddefconfig
# 或
make olddefconfig kernelmake olddefconfig rootmake olddefconfig uboot
复制代码

编译


一起编译 kernel 和 buildroot:


make build APP="kernel root"
复制代码

单独编译 kernel 和 buildroot:


make kernel-build  # make kernelmake root-build    # make root
# 或
make build kernelmake 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-saveconfigmake root-saveconfigmake root-savemake kernel-save
# 或
make saveconfig kernelmake saveconfig rootmake save kernelmake save root
复制代码

启动


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


make boot
复制代码

图形方式启动 (如果要退出请使用 CTRL+ALT+2 quit):


make b=pc boot G=1 LINUX=v5.1make b=versatilepb boot G=1 LINUX=v5.1make b=g3beige boot G=1 LINUX=v5.1make b=malta boot G=1 LINUX=v2.6.36make 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.1make 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 两款开发板):


make boot U=0
复制代码

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


make boot ROOTDEV=/dev/ram      // support by all boards, basic boot methodmake boot ROOTDEV=/dev/nfs      // depends on network driver, only raspi3 not workmake boot ROOTDEV=/dev/sdamake boot ROOTDEV=/dev/mmcblk0make boot ROOTDEV=/dev/vda      // virtio based block device
复制代码

使用额外的内核命令行参数启动(格式:XKCLI = eXtra Kernel Command LIne):


make boot ROOTDEV=/dev/nfs XKCLI="init=/bin/bash"
复制代码

列出支持的选项:


make list ROOTDEVmake list BOOTDEVmake list CCORImake list NETDEVmake list LINUXmake list UBOOTmake list QEMU
复制代码

使用 list <xxx> 可以实现更多 <xxx>-list,例如:


make list featuresmake list modulesmake list gcc
复制代码


发布于: 2021 年 02 月 03 日阅读数: 18
用户头像

贾献华

关注

及时当勉励 岁月不待人 2018.06.04 加入

https://2020.iosdevlog.com

评论

发布
暂无评论
Linux-Lab 入门:详细步骤分解