当前位置: 首页 > news >正文

Try ubuntu core (by quqi99)

作者:张华 发表于:2024-07-20
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明(http://blog.csdn.net/quqi99)

try ubuntu core on qemu

#ovmf is to ensure compatibility with the required UEFI features in ubuntu core
sudo apt install qemu-kvm ovmf
kvm-ok
#swtpm is to provide a TPM emulator
sudo snap install --edge test-snapd-swtpm
#Download ubuntu core - https://ubuntu.com/core/docs/supported-platforms
wget https://cdimage.ubuntu.com/ubuntu-core/24/stable/current/ubuntu-core-24-amd64.img.xz
xz -d ubuntu-core-24-amd64.img.xz
#With TPM emulation and full disk encryption
sudo qemu-system-x86_64 -enable-kvm -smp 1 -m 2048 -machine q35 -cpu host -global ICH9-LPC.disable_s3=1 \-net nic,model=virtio -net user,hostfwd=tcp::8022-:22,hostfwd=tcp::8090-:80  \-drive file=/usr/share/OVMF/OVMF_CODE.secboot.fd,if=pflash,format=raw,unit=0,readonly=on \-drive file=/usr/share/OVMF/OVMF_VARS.ms.fd,if=pflash,format=raw,unit=1 \-drive "file=/images/kvm/ubuntu-core-24-amd64.img",if=none,format=raw,id=disk1 \-device virtio-blk-pci,drive=disk1,bootindex=1 -serial mon:stdio
#https://login.ubuntu.com  and https://login.ubuntu.com/ssh-keys
ssh <your-name>@localhost -p 8022

try ubuntu core on raspberry pi

#download image from https://ubuntu.com/core/docs/supported-platforms , eg: ubuntu-core-24-arm64+raspi.img.xz
xz -d ubuntu-core-24-arm64+raspi.img.xz
sudo dd if=ubuntu-core-24-arm64+raspi.img of=/dev/sdb status=progress; sync

try ubuntu core on x64 computer

#dd to usb or disk
sudo dd if=/images/kvm/ubuntu-core-24-amd64.img of=/dev/sdb status=progress; sync

树霉派上的linux启动流程理论分析

注意:下面的过程只是我从网上做的一个理论分析,并没有做实验,只是想让自己大致心里清楚有些大致的步骤。

树莓派4b启动流程:romboot–>uboot–>kernel–>rootfs
1, 第一阶段bootloader, 上电后,加载bootrom(固化在芯片内部,4b之前通过EEPROM加载SD上的bootcode.bin)到GPU中运行来初始化PLL, DDR等
2, 第二阶段bootloader, 从SD/网络/USB等加载start4.elf, 接着读取config.txt去进行uboot的启动流程
3, 启动kernel

通过JTAG将uboot引导安装到开发板Nor Flash/BIOS中,有两类,一类是并口,一类是USB代替并口(/dev/ttyUSB0)
通过uboot将OS(如tftp)引导安装到开发板NAND Flash中
打开Raspberry Pi Imager烧录镜(romboot)像到SD中, 默认串口没有输出,需修改config.txt在末尾添加enable_uart=1
在这里插入图片描述
1, 交叉编译工具的安装与uboot的编译

wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz -C /bak/soft/arm
alias crosscompiler='export KERNEL=kernel8;export ARCH=arm64;export CROSS_COMPILE=/bak/soft/arm/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-'
git clone https://github.com/u-boot/u-boot.git
cp ./u-boot <your-sd>
git checkout v2020.04-rc3
sudo apt install u-boot-tools bison bc make flex libssl-dev ncurses-* -y
crosscompiler
make rpi_4_defconfig
make -j $(nproc)
cat << EOF |tee ./config.txt
ls u-boot.bin
arm_control=0x200  #64 bits
kernel=u-boot.bin
dtoverlay=disable-bt #If serial debugging is enabled, Bluetooth cannot be used
EOF下面是一个客户使用的config.txt, 本来无法进入ubuntu core内核,但改为dtoverlay=vc4-kms-v3d就修复了
[cm4]
otg_mode=1
[pi4]
kernel=uboot_rpi_4.bin
dtoverlay=vc4-fkms-v3d,cma-128
dtoverlay=dwc2,dr_mode=host
[pi3]
kernel=uboot_rpi_3.bin
dtoverlay=vc4-fkms-v3d,cma-128
max_framebuffers=2
[all]
arm_64bit=1
enable_uart=1

2, 编译树莓派Linux源代码, 并通过tftp加载kernel

git clone --branch rpi-5.6.y https://github.com/raspberrypi/linux
mkdir rpi_hw
make O=rpi_hw bcm2711_defconfig
make O=rpi_hw menuconfig
make O=rpi_hw -j $(nproc)
ls rpi_hw/arch/arm64/boot
sudo cp rpi_hw/arch/arm64/boot/Image /bak/tftp/

进入u-boot命令窗口(就像进入bios一样的, 可能需要在出现“Hit any key to stop autoboot: 3”时,按下空格键)后运行

sudo minicom -D /dev/ttyUSB0 -b 115200  #press power key
setenv ipaddr 10.1.1.100 #设置开发板的静态地址(自定义)
setenv serverip 10.1.1.160 #设置根文件系统的nfs服务器地址
setenv netmask 255.255.255.0
saveenv
reset
setenv kernel_addr_r 0x8000
setenv kernel Image
setenv netboot 'tftp ${kernel_addr_r} ${kernel} && booti ${kernel_addr_r} - ${fdtcontroladdr}'
setenv bootcmd 'run netboot'
setenv bootargs 'console=ttyAMA0'
saveenv
reset

设置cmdline, 可以用下列的u-boot命令设置,也可以在/run/mnt/ubuntu-seed/cmdline.txt中设置

setenv nfsroot /opt/nfs/
setenv bootargs "console=ttyAMA0,115200 root=/dev/nfs rw nfsroot=${serverip}:${nfsroot},v3,tcp ip=$ipaddr:$serverip::$netmask::eth0:off"
saveenv

搭建tftp服务器的步骤:

#windows client is Tftp64
sudo apt install tftpd-hpa tftp-hpa -y  
cat << EOF |tee /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/bak/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure --create"
EOF
sudo chown tftp:tftp /bak/tftp
sudo systemctl restart tftpd-hpa
echo 'test' |sudo tee /bak/tftp/test.txt
tftp 127.0.0.1 -c get test.txt

3, 从nfs文件系统中挂载根文件系统

sd里有两个分区,一个rootfs一个boot, 将boot分区的所有文件拷到file路径下
sudo cp <rootfs_in_sd> /opt/nfs/ -R
sudo mkdir -p /opt/nfs/file
sudo cp <all-files-in-boot> /opt/nfs/file/
sudo vim etc/fstab10.1.1.160:/opt/nfs/file /boot nfs defaults,vers=4.1,proto=tcp 0 0

Reference

[1] https://ubuntu.com/core/docs/testing-with-qemu
[2] https://blog.csdn.net/quqi99/article/details/80425722
[3] https://cloud.tencent.com/developer/article/1806436

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • leetcode日记(48)排列序列
  • Harmony Next -- 通用标题栏:高度自定义,可设置沉浸式状态,正常状态下为:左侧返回、居中标题,左中右均可自定义视图。
  • 「运费速查神器」精明买家必备!一键查询1688供应商发货费用
  • 白骑士的PyCharm教学基础篇 1.2 PyCharm基本操作
  • VMware三种网络模式---巨细
  • Linux下如何使用GitLab进行团队协作
  • ES6 数值的扩展(十八)
  • 【MySQL】:对库和表的基本操作方法
  • 33.【C语言】实践扫雷游戏
  • WEB安全-SQL注入
  • 鸿蒙语言基础类库:【@system.vibrator (振动)】
  • 【Langchain大语言模型开发教程】记忆
  • electron学习笔记
  • linux之网络子系统-本机发包到本机 实现
  • 1比25万基础电子地图(广东版)
  • 【知识碎片】第三方登录弹窗效果
  • Angular6错误 Service: No provider for Renderer2
  • es6(二):字符串的扩展
  • Hibernate最全面试题
  • JS+CSS实现数字滚动
  • Laravel核心解读--Facades
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • React的组件模式
  • Swift 中的尾递归和蹦床
  • windows下mongoDB的环境配置
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 翻译--Thinking in React
  • 聊聊hikari连接池的leakDetectionThreshold
  • 漂亮刷新控件-iOS
  • 人脸识别最新开发经验demo
  • 入口文件开始,分析Vue源码实现
  • 深入浅出Node.js
  • 数据可视化之 Sankey 桑基图的实现
  • 移动端 h5开发相关内容总结(三)
  • 再谈express与koa的对比
  • ​ssh免密码登录设置及问题总结
  • ​虚拟化系列介绍(十)
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #QT(QCharts绘制曲线)
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (js)循环条件满足时终止循环
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (论文阅读11/100)Fast R-CNN
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NetCore 如何动态路由
  • .NET开发不可不知、不可不用的辅助类(一)