debian------1-----make ISO

本文介绍如何使用 Debian 的 live-build 工具构建自定义的 Debian Live CD,包括配置软件源、设置系统语言和中文支持等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://debian-live.alioth.debian.org/live-manual/unstable/manual/html/live-manual.en.html

 

相关命令:
lb config
在当前目录下建立auto和config目录和相关配置文件,运行auto/config脚本。
lb clean 
运行auto/clean脚本
lb build
按照config目录下的各种配置脚本构建系统镜像

软件源的指定:(增加parent前缀可以强制使用指定源:--parent-mirror-bootstrap http://mirrors.163.com/ubuntu/ \
To set the distribution mirrors at build time : chroot

$ lb config --mirror-bootstrap http://localhost/debian/ \ 
--mirror-chroot-security http://localhost/debian-security/ \ 
--mirror-chroot-backports http://localhost/debian-backports/ 

chroot mirror:--mirror-chroot, 默认使用—mirror-bootstrap 的值
或者创建config/archives/your-repository.list.chroot 文件,内容为源地址。源会被加入到live系统的/etc/apt/sources.list.d/目录。 

set the distribution mirrors at run time: binary

$ lb config --mirror-binary http://mirror/debian/ \ 
--mirror-binary-security http://mirror/debian-security/ 
或者创建config/archives/your-repository.list.binary 文件,内容为源地址。

对系统的软件包进行定制:
方法一、将所需的包列表放在config/package-lists目录下,并命名为XXX.chroot.list或XXX.binary.list即可。
方法二、使用--package-lists “XXX”,将使用/usr/share/live/build/package-lists/下的指定包列表
方法三、将自定义的包放到config/chroot_packages/目录下即可

auto/config中为配置参数,例如:
lb config noauto \
--distribution "precise" \

--mode ubuntu \

--initsystem none \

--source false \

--parent-archive-areas "main restricted universe" \

--parent-mirror-bootstrap http://mirrors.163.com/ubuntu/ \

--parent-mirror-chroot http://mirrors.163.com/ubuntu/ \

--parent-mirror-chroot-security http://mirrors.163.com/ubuntu/ \

--parent-mirror-chroot-backports http://mirrors.163.com/ubuntu/ \

--parent-mirror-binary http://mirrors.163.com/ubuntu/ \

--package-lists none \

--bootloader "syslinux" \

--initramfs-compression lzma \

--bootstrap-keyring ubuntu-keyring \

--binary-images "iso-hybrid" \

--memtest "memtest86+" \

"${@}"

在执行lb config后会按此脚本中的参数生成config目录下的binary、bootstrap、 chroot、 common四个配置文件。lb build读取这四个配置文件,所以也可以在lb config后可以对这四个文件内的参数做具体修改。

syslinux主题设置
--syslinux-theme "ubuntu-precise" 可在auto/config中指定主题名,默认是用本地系统的主题。
会在本地特定目录中查找并复制指定主题到livecd镜像中去(具体可看live-build这部分的脚本)

自定义目录:
自定义的目录和其中的文件放在config/相应的include目录下即可
config/binary_local-includes(以生成镜像的根目录为根目录)
config/chroot_local-includes(以目标系统的根目录为根目录)

HOOKS:
在live-build完成每个阶段的工作后都会运行config/相应hooks中的脚本。
config/binary_local-hooks
config/chroot_local-hooks

开机默认语言:
在 config/binary_local-hooks下增加如下脚本,并建立config/language.txt文件,其内容为:zh_CN (live系统启动的默认语言)
#!/bin/sh -e

LOC=config/language.txt

if [ -e "$LOC" ]; then

    echo "$0: $LOC exists, setting gfxboot default language..."

    cp "$LOC" binary/isolinux/lang

    echo >> binary/isolinux/lang

else

    echo "$0: $LOC does not exist, not setting gfxboot default language"

fi

系统中文支持:
在config/chroot_local-hooks下添加如下脚本
#!/bin/sh

set -e
echo 'P: Configuring language support...'
lang="zh-hans"

    [ -n "$lang" ] || continue

    pkgs=`check-language-support -l $lang`

        pkgs=`echo "$pkgs" | xargs -n1 | grep ^language-pack-` || true

    if [ -n "$pkgs" ]; then

        echo "P: Installing packages for language $lang: $pkgs"

        apt-get -y -q install $pkgs

    fi

echo 'P: Language support configuration done.'

live镜像启动界面更改:
syslinux模式的脚本为lb_binary_syslinux,使用的文件是:
/usr/share/syslinux/themes/${LB_SYSLINUX_THEME}/${_BOOTLOADER}-live/*
tar xzf /usr/share/gfxboot-theme-ubuntu/bootlogo.tar.gz
可以用修改过的替换相关文件。
auto/config中的用来指定内核启动参数的配置项:--bootappend-live,似乎在syslinux中必须有live.cfg。而ubuntu的syslinux主题文件结构中没有此文件,以至于配置项:--bootappend-live无效。

在使用lb build前需要做些修正:
1、使用--initramfs-compression lzma 时必须将config/common中LB_INITRAMFS_COMPRESSION="lzma"的"lzma"替换为"gzip"
# work around live-build failure with lzma initramfs (Debian #637979)

sed -i 's/^LB_INITRAMFS_COMPRESSION="lzma"/LB_INITRAMFS_COMPRESSION="gzip"/' config/common

2、默认kernel文件的名称不对,需要增加如下修改脚本
# rename kernel and initrd to what syslinux expects

cat <<EOF > config/binary_local-hooks/rename-kernel

#!/bin/sh -e

if [ ! -e binary/casper/initrd.lz ]; then

    zcat binary/casper/initrd.img-* | lzma -c > binary/casper/initrd.lz

    rm binary/casper/initrd.img-*

fi

if [ ! -e binary/casper/vmlinuz ]; then

    mv binary/casper/vmlinuz-* binary/casper/vmlinuz

fi

EOF

最终执行lb build构建订制的livecd镜像

<think>好的,我需要帮助用户了解如何正确使用qemu-aarch64命令。用户之前已经询问过关于qemu-arm的使用,现在转向qemu-aarch64,可能是在尝试运行64位ARM系统。首先,我需要区分qemu-system-aarch64和qemu-aarch64的不同。 根据用户提供的引用[1],用户可能看到了在Windows上创建aarch64虚拟机的示例,但用户现在可能更关注的是在Linux环境下使用qemu-aarch64运行用户模式程序或全系统模拟。需要明确qemu-aarch64通常指的是用户模式模拟,而qemu-system-aarch64是系统模式模拟,两者的用途不同。 用户之前的问题中,我详细讲解了qemu-arm的使用,包括运行静态和动态程序、调试等。现在需要将类似的内容迁移到aarch64架构,同时考虑64位特有的参数和配置。比如,动态链接库路径可能不同,CPU型号也需要对应,如cortex-a72、cortex-a53等。 需要检查用户是否可能混淆了用户模式和系统模式。在回答中应该明确区分这两种模式的使用场景。用户提供的引用中提到的命令是系统模式,但用户的问题可能更倾向于用户模式,所以需要确认用户的实际需求。 接下来,我需要构建一个结构清晰的指南,包括核心命令结构、安装验证、典型场景示例、常见问题等。同时,要确保使用正确的参数,比如-L路径在aarch64下可能不同,例如/usr/aarch64-linux-gnu。还需要提供编译示例,使用aarch64-linux-gnu-gcc编译器。 另外,用户可能遇到动态链接库的问题,需要指导如何正确设置库路径或安装对应的交叉编译库。在调试部分,可能需要使用gdb-multiarch连接到qemu的调试端口,这与之前qemu-arm的步骤类似,但需确认端口和架构是否正确。 在系统模式部分,用户引用中的参数可以作为示例,但需要解释每个参数的作用,如-M指定机器类型,-bios指定固件,-device添加外设等。同时,要提醒用户需要准备合适的EFI固件和镜像文件,比如UEFI.fd和安装ISO。 还要考虑用户的环境,是否已经安装了必要的包,比如qemu-system-arm、交叉编译工具链等。对于不同发行版,安装命令可能不同,需要给出示例,如Ubuntu下的安装步骤。 最后,生成相关问题,帮助用户进一步探索,比如如何配置网络、性能优化、与用户模式的区别等。确保引用正确,比如用户提供的引用[1]是关于系统模式的,可能在相关问题中提及。 需要检查所有命令的正确性,避免拼写错误,并确保参数适用于aarch64架构。同时,保持回答结构清晰,步骤详细,便于用户逐步操作验证。</think>### QEMU-aarch64 使用详解(用户模式 + 系统模式) --- #### 一、核心模式区分 1. **用户模式**:`qemu-aarch64`(直接运行ARM64程序) ```bash # 运行ARM64程序(类似qemu-arm的64位版本) qemu-aarch64 -L /usr/aarch64-linux-gnu ./hello_aarch64 ``` 2. **全系统模式**:`qemu-system-aarch64`(完整虚拟机) ```bash # 启动ARM64虚拟机(需搭配UEFI固件) qemu-system-aarch64 -M virt -cpu cortex-a72 -m 4G -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -hda ubuntu-arm64.img ``` --- #### 二、用户模式实战(运行单程序) **步骤1:环境准备** ```bash # Ubuntu/Debian安装依赖 sudo apt install qemu-user-static gcc-aarch64-linux-gnu # 验证工具链 aarch64-linux-gnu-gcc --version # 应显示aarch64编译器信息[^2] ``` **步骤2:编译与运行** ```c // hello.c #include <stdio.h> int main() { printf("ARM64程序运行成功\n"); return 0; } ``` ```bash # 编译ARM64程序 aarch64-linux-gnu-gcc -static hello.c -o hello_static aarch64-linux-gnu-gcc hello.c -o hello_dynamic # 运行动态链接程序(需指定库路径) qemu-aarch64 -L /usr/aarch64-linux-gnu/ ./hello_dynamic # 输出"ARM64程序运行成功"即验证通过[^3] ``` **调试技巧**: ```bash # 启动GDB调试 qemu-aarch64 -g 1234 ./hello_dynamic & gdb-multiarch ./hello_dynamic (gdb) target remote :1234 (gdb) b main ``` --- #### 三、全系统模式配置(完整虚拟机) **核心参数说明**: ```bash qemu-system-aarch64 \ -M virt \ # 使用QEMU虚拟化平台 -cpu cortex-a72 \ # 指定CPU型号 -smp 4 \ # 4个CPU核心 -m 8G \ # 内存大小 -bios QEMU_EFI.fd \ # UEFI固件(需提前准备) -drive file=ubuntu-arm64.img,format=raw \ # 系统磁盘 -device virtio-gpu-pci \ # GPU加速 -netdev user,id=net0 -device virtio-net-pci,netdev=net0 # 网络配置 ``` **典型启动流程**: 1. 下载UEFI固件: ```bash wget https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu64/QEMU_EFI.fd ``` 2. 创建虚拟磁盘: ```bash qemu-img create -f qcow2 ubuntu-arm64.img 20G ``` 3. 启动安装镜像: ```bash qemu-system-aarch64 -M virt -cpu cortex-a72 -m 4G \ -bios QEMU_EFI.fd -cdrom ubuntu-22.04-live-server-arm64.iso \ -drive file=ubuntu-arm64.img,format=qcow2 \ -device virtio-net-device,netdev=net0 -netdev user,id=net0 ``` --- #### 四、常见问题解决 | 问题场景 | 解决方案 | |---------|----------| | **UEFI固件缺失** | 安装`qemu-efi-aarch64`包或手动下载`QEMU_EFI.fd` | | **启动卡在UEFI Shell** | 在Shell中执行`FS0:\EFI\BOOT\BOOTAA64.EFI`[^1] | | **动态链接库错误** | 使用`-L`指定路径或安装`libc6-arm64-cross` | | **网络不可用** | 添加`-nic user,model=virtio-net-pci`参数 | | **图形界面黑屏** | 改用`-nographic`或添加`-device virtio-gpu-pci` | --- #### 五、性能优化建议 1. **启用KVM加速**(需宿主CPU支持): ```bash qemu-system-aarch64 -enable-kvm -machine virt,gic-version=3 ... ``` 2. **使用virtio设备**: ```bash -drive file=disk.img,if=virtio -netdev user,id=net0,model=virtio ``` 3. **分配大页内存**: ```bash -mem-prealloc -mem-path /dev/hugepages ``` --- ### 验证成功标志 1. 用户模式程序正确输出预期结果 2. 全系统模式下完成操作系统安装 3. 虚拟机内执行`uname -m`显示`aarch64` 4. GDB可正常调试ARM64汇编指令 --- ### 高级应用示例 **运行Android ARM64镜像**: ```bash qemu-system-aarch64 -M virt -cpu cortex-a72 -m 6G \ -bios QEMU_EFI.fd -device virtio-gpu-pci \ -drive file=android-arm64.img,format=raw \ -nic user,hostfwd=tcp::5555-:5555 # 启用ADB端口转发 ``` **交叉编译内核测试**: ```bash # 编译ARM64内核 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j8 # 使用QEMU启动测试 qemu-system-aarch64 -M virt -cpu cortex-a72 -m 2G \ -kernel arch/arm64/boot/Image -append "root=/dev/vda console=ttyAMA0" ``` --- ### 相关问题 1. 如何通过QEMU实现ARM64与x86主机之间的文件共享? 2. 用户模式与系统模式在资源占用上有何本质区别? 3. 如何配置TPM安全芯片支持运行Windows ARM64? 4. QEMU中如何调试ARM64内核的启动过程? : UEFI固件路径可能因发行版不同而变化 [^2]: 交叉编译工具链需与目标系统glibc版本匹配 [^3]: `qemu-aarch64-static`更适合容器环境嵌入使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值