searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Linux系统的构建和调试1-使用指南

2024-12-11 08:57:58
5
0

1 介绍

1.1 linux-toy由来

已经多年没有开发过内核态代码了。最近,由于项目需要,需要开发和调试Linux kernel模块。

翻箱倒柜,找到了以前开发内核的的一个自用脚本fjrti/linux-toy(gitee上自取)。感觉对于了解内核或连接Linux系统运行原理,还是有点价值的。写几篇文章记录一下:

 

Linux系统的构建和调试1-使用指南:就是本文,介绍。

Linux系统的构建和调试2-原理介绍:介绍工作原理,待填坑。

Linux系统的构建和调试2-Rootfs的制作:介绍rootfs,待填坑。

 

1.2 特点

Linux-toy的几个特点:

  • 最简设计
    • 使用一个makefile文件来总控
    • 提供了一个小型化的Linux config文件。
  • 支持两种rootfs
    • 基于busybox的rootfs:完全从源代码构建袖珍型Linux。
    • 基于Alpine的rootfs:可以通过apk安装需要的软件。
    • 两种rootfs都已经内置了网络设置,默认网络就是通的。
  • 支持两种网络模式
    • user模式:有点是不修改host网络配置,可以直接访问外网。
    • bridge模式:创建的多个VM接入同一个bridge。设置了iptable访问外网。
  • 支持内核调试
    • 默认的config已经开启了调试能力。
    • 支持gdb直接调试内核代码。
  • 支持目录
    • 默认使用9P实现,host当前目录挂载到guest的/mnt/share下。

 

说明:

本人只处理Linux网络相关的代码,所以在内核配置文件中打开了大部分网络相关的功能,自行配置。

本脚本之适配了个人常用的centos7和archlinux。其他发行版,自行适配,非常简单。

 

1.3 运行依赖

Linux-toy的初衷是尽可能简单,基本上只使用下面的基本工具:

1、编译Linux kernel需要的工具。

2、qemu

3、bridge-utils iptables Dnsmasq telnet配置网络

 

2 使用说明

make help
Support targets:
  build      - Build linux kernel and rootfs
  create     - Create a qemu VM (root/123456)
  debug      - Debug linux kernel
  show       - List qemu VM
  stop       - Stop all qemu VM
  clean      - Delete kernel image and rootfs image
  distclean  - Delete all image and source code
* help       - Show this message, default target

Support parameters:
  make id=0|1|..|9       [targets]  - Specify VM id (default 0)
  make fs=busybox|alpine [targets]  - Specify rootfs (default busybox)
  make net=user|bridge   [targets]  - Specify network mode (default user)
  make kvm=on|off        [targets]  - Specify kvm mode (default off)
  make cpu=size          [targets]  - Specify vcpu (default 1)
  make mem=size          [targets]  - Specify memory size (default 512m)

帮助信息已经比较完整,简单说明一下:

  • 创建多个vm的时候,可以指定id作为区分。
  • user网络默认下,guest的tcp 23端口映射到host的23端口上,使用telnet 127.0.0.1登录guest
  • bridge网络模式下,/var/run/dnsmasq-fjrti.leases查看dhcp分配的地址,telnet登录guest,。
  • 也通过通过VNC登录guest,端口号为5900 + id。
  • host当前目录挂载到guest的/mnt/share下。

 

使用举例:

make create kvm=on fs=alpine net=bridge

make debug id=1 kvm=on fs=alpine net=bridge cpu=2 

 

3 结束

留两个思考题,有兴趣的同学可以分析一下:

1、qemu的-kernel和-initrd是原理,如何沟通guest?

2、user-mode的网络模式,工作原理是什么?

 

 

 

 

 

 

 

 

 

 

0条评论
作者已关闭评论
c****w
1文章数
0粉丝数
c****w
1 文章 | 0 粉丝
c****w
1文章数
0粉丝数
c****w
1 文章 | 0 粉丝
原创

Linux系统的构建和调试1-使用指南

2024-12-11 08:57:58
5
0

1 介绍

1.1 linux-toy由来

已经多年没有开发过内核态代码了。最近,由于项目需要,需要开发和调试Linux kernel模块。

翻箱倒柜,找到了以前开发内核的的一个自用脚本fjrti/linux-toy(gitee上自取)。感觉对于了解内核或连接Linux系统运行原理,还是有点价值的。写几篇文章记录一下:

 

Linux系统的构建和调试1-使用指南:就是本文,介绍。

Linux系统的构建和调试2-原理介绍:介绍工作原理,待填坑。

Linux系统的构建和调试2-Rootfs的制作:介绍rootfs,待填坑。

 

1.2 特点

Linux-toy的几个特点:

  • 最简设计
    • 使用一个makefile文件来总控
    • 提供了一个小型化的Linux config文件。
  • 支持两种rootfs
    • 基于busybox的rootfs:完全从源代码构建袖珍型Linux。
    • 基于Alpine的rootfs:可以通过apk安装需要的软件。
    • 两种rootfs都已经内置了网络设置,默认网络就是通的。
  • 支持两种网络模式
    • user模式:有点是不修改host网络配置,可以直接访问外网。
    • bridge模式:创建的多个VM接入同一个bridge。设置了iptable访问外网。
  • 支持内核调试
    • 默认的config已经开启了调试能力。
    • 支持gdb直接调试内核代码。
  • 支持目录
    • 默认使用9P实现,host当前目录挂载到guest的/mnt/share下。

 

说明:

本人只处理Linux网络相关的代码,所以在内核配置文件中打开了大部分网络相关的功能,自行配置。

本脚本之适配了个人常用的centos7和archlinux。其他发行版,自行适配,非常简单。

 

1.3 运行依赖

Linux-toy的初衷是尽可能简单,基本上只使用下面的基本工具:

1、编译Linux kernel需要的工具。

2、qemu

3、bridge-utils iptables Dnsmasq telnet配置网络

 

2 使用说明

make help
Support targets:
  build      - Build linux kernel and rootfs
  create     - Create a qemu VM (root/123456)
  debug      - Debug linux kernel
  show       - List qemu VM
  stop       - Stop all qemu VM
  clean      - Delete kernel image and rootfs image
  distclean  - Delete all image and source code
* help       - Show this message, default target

Support parameters:
  make id=0|1|..|9       [targets]  - Specify VM id (default 0)
  make fs=busybox|alpine [targets]  - Specify rootfs (default busybox)
  make net=user|bridge   [targets]  - Specify network mode (default user)
  make kvm=on|off        [targets]  - Specify kvm mode (default off)
  make cpu=size          [targets]  - Specify vcpu (default 1)
  make mem=size          [targets]  - Specify memory size (default 512m)

帮助信息已经比较完整,简单说明一下:

  • 创建多个vm的时候,可以指定id作为区分。
  • user网络默认下,guest的tcp 23端口映射到host的23端口上,使用telnet 127.0.0.1登录guest
  • bridge网络模式下,/var/run/dnsmasq-fjrti.leases查看dhcp分配的地址,telnet登录guest,。
  • 也通过通过VNC登录guest,端口号为5900 + id。
  • host当前目录挂载到guest的/mnt/share下。

 

使用举例:

make create kvm=on fs=alpine net=bridge

make debug id=1 kvm=on fs=alpine net=bridge cpu=2 

 

3 结束

留两个思考题,有兴趣的同学可以分析一下:

1、qemu的-kernel和-initrd是原理,如何沟通guest?

2、user-mode的网络模式,工作原理是什么?

 

 

 

 

 

 

 

 

 

 

文章来自个人专栏
野生程序员
1 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0