长生栈 长生栈
首页
  • 编程语言

    • C语言
    • C++
    • Java
    • Python
  • 数据结构和算法

    • 全排列算法实现
    • 动态规划算法
  • CMake
  • gitlab 安装和配置
  • docker快速搭建wordpress
  • electron+react开发和部署
  • Electron-创建你的应用程序
  • ImgUI编译环境
  • 搭建图集网站
  • 使用PlantUml画时序图
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Living Team

编程技术分享
首页
  • 编程语言

    • C语言
    • C++
    • Java
    • Python
  • 数据结构和算法

    • 全排列算法实现
    • 动态规划算法
  • CMake
  • gitlab 安装和配置
  • docker快速搭建wordpress
  • electron+react开发和部署
  • Electron-创建你的应用程序
  • ImgUI编译环境
  • 搭建图集网站
  • 使用PlantUml画时序图
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机视觉

  • ESP32开发

  • Linux系统移植

    • Linux系统移植(一)--- 交叉编译工具链的配置
    • Linux系统移植(二)--- Uboot移植
    • Linux系统移植(三)--- Linux kernel移植
    • Linux系统移植(四)--- 使用busybox制作根文件系统(rootfs)
    • Linux系统移植(五)--- 制作、烧录镜像并启动Linux
      • 一、制作镜像文件
        • 1.使用dd命令创建img镜像文件:
        • 2.安装工具
        • 3.创建分区
        • 4.加载img文件
        • 5.格式化两分区
        • 6.挂载两个分区
        • 7.将boot,内核,设备树文件拷贝进boot分区中
        • 8.将根文件系统放入rootfs分区
        • 9.卸载分区
        • 10.卸载img
      • 二、烧录镜像
      • 三、通过串口连接开发板
        • 硬件准备
        • Xshell配置
      • 四、Linux,启动!!!
      • 参考文章
  • 快速开始

  • 编程小知识

  • 技术
  • Linux系统移植
DC Wang
2024-02-05
目录

Linux系统移植(五)--- 制作、烧录镜像并启动Linux

# Linux系统移植(五)--- 制作、烧录镜像并启动Linux

以Orange Pi Zero3为例。Linux,启动!!!

# 一、制作镜像文件

# 1.使用dd命令创建img镜像文件:

sudo dd if=/dev/zero of=livingteam.img bs=1M count=300
1

# 2.安装工具

sudo apt install kpartx fdisk
1

# 3.创建分区

sudo fdisk ./livingteam.img
1

操作如下:

Command (m for help): n //创建分区
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p //创建主分区
Partition number (1-4, default 1): 1 //第一分区
First sector (2048-614399, default 2048): 2048 //默认 也可直接按回车
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-614399, default 614399): +16m //表示增加16m

Created a new partition 1 of type 'Linux' and of size 16 MiB.

Command (m for help): n //创建分区
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p //创建主分区
Partition number (2-4, default 2): 2 //第二分区
First sector (34816-614399, default 34816): 34816 //默认 也可直接按回车
Last sector, +/-sectors or +/-size{K,M,G,T,P} (34816-614399, default 614399): //直接按回车,表示后面的全部为该分区的内容

Created a new partition 2 of type 'Linux' and of size 283 MiB.

Command (m for help): w //保存并退出
The partition table has been altered.
Syncing disks.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

分区结果如下所示:

$sudo fdisk ./livingteam.img
Command (m for help): p //查看分区情况
Device            Boot Start    End Sectors  Size Id Type
./livingteam.img1       2048  34815   32768   16M 83 Linux
./livingteam.img2      34816 614399  579584  283M 83 Linux
1
2
3
4
5

# 4.加载img文件

sudo kpartx -av ./livingteam.img
1

加载成功会出现以下位置:

add map loop18p1 (252:0): 0 32768 linear 7:18 2048
add map loop18p2 (252:1): 0 579584 linear 7:18 34816
1
2

说明在设备加载在/dev/loop18 而两个分区是/dev/mapper/loop18p1 和loop18p2

# 5.格式化两分区

# 第一分区为fat16(按需求 v3s是fat16)
sudo mkfs -t fat /dev/mapper/loop18p1
# 第二分区为ext4,标签为rootfs
sudo mkfs.ext4  /dev/mapper/loop18p2 -L rootfs
1
2
3
4

# 6.挂载两个分区

# 创建两个文件夹
mkdir -p ./boot
mkdir -p ./rootfs
# 挂载两个分区到两个文件夹中
sudo mount /dev/mapper/loop18p1 ./boot/
sudo mount /dev/mapper/loop18p2 ./rootfs/
1
2
3
4
5
6

# 7.将boot,内核,设备树文件拷贝进boot分区中

# boot需要按照芯片要求放置
# 以v3s为例子:
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/loop18 bs=1024 seek=8
# (要放置在loop18设备内因为loop18p1 p2都是loop18目录下的可以使用磁盘命令lsblk -f查看树)
sudo cp /linux-6.7.3/arch/arm64/boot/Image ./boot/
sudo cp /linux-6.7.3/arch/arm64/boot/dts/allwinner/sun50i-h618-orangepi-zero3.dtb ./boot/
1
2
3
4
5
6

# 8.将根文件系统放入rootfs分区

sudo cp /rootfs/* ./rootfs/ -rdf
1
  • -d:复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式。
  • -r 或 --recursive:用于复制目录及其所有的子目录和文件,如果要复制目录,需要使用该选项。
  • -f 或 --force:强制复制,即使目标文件已存在也会覆盖,而且不给出提示。

此时,已经可以对livingteam.img文件传输到Windows上,用于下一步的烧录。

# 9.卸载分区

sudo umount ./boot/
sudo umount ./rootfs/
1
2

# 10.卸载img

sudo kpartx -dv ./livingteam.img
1

# 二、烧录镜像

将Ubuntu22.04虚拟机中的livingteam.img通过xshell和xftp传输到Windows上,在Windows上使用balenaEtcher烧录镜像。

xshell/xftp官网: 家庭/学校免费 - NetSarang Website (xshell.com) (opens new window)

balenaEtcher官网:balenaEtcher - Flash OS images to SD cards & USB drives (opens new window)

image-20240205224311092

烧录过程非常简单,根据提示一步步操作即可。

# 三、通过串口连接开发板

# 硬件准备

USB转TTL模块(某宝几块钱一个)

将烧录好镜像的内存卡插入Orange Pi Zero3开发板,使用串口连接到Windows主机上。下面使Orange Pi Zero3开发板官方文档:

官网: Orange Pi Zero3 (opens new window)

image-20240205225318402

# Xshell配置

1.通过设备管理器查看串口端口信息,此时为COM5

image-20240205230041818

2.打开 xshell点击文件选择新建

image-20240205230357732

3.新建会话属性

  • 选择协议类型

image-20240205231016625

  • 设置串口信息:端口号

image-20240205231405700

  • 选择ASCII127,否则程序获取输入时删除键不好用

    image-20240205231644255

最后点击确定,在会话管理器中双击即可连接

image-20240205232038718

连接成功显示下面信息:

Xshell 7 (Build 0144)
Copyright (c) 2020 NetSarang Computer, Inc. All rights reserved.

Type `help' to learn how to use Xshell prompt.
[C:\~]$ 

Connecting to COM5...
Connected.
1
2
3
4
5
6
7
8

# 四、Linux,启动!!!

插入电源,启动开发板。xshell终端输出启动log。

当输出到下面时,按下回车进入uboot命令行界面:

starting USB...
Bus usb@5200000: USB EHCI 1.00
Bus usb@5200400: USB OHCI 1.0
scanning bus usb@5200000 for devices... 1 USB Device(s) found
scanning bus usb@5200400 for devices... 1 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
Hit any key to stop autoboot:  2 
=> 
1
2
3
4
5
6
7
8

输入启动参数并保存成环境变量,下次直接启动不需要进入uboot命令行界面。

setenv bootargs 'root=/dev/mmcblk0p2 rw init=/linuxrc console=ttyS0,115200 rootwait'
setenv bootcmd 'fatload mmc 0:1 0x4a000000 Image;fatload mmc 0:1 0x4ba00000 sun50i-h618-orangepi-zero3.dtb;booti 0x4a000000 - 0x4ba00000'
saveenv
boot
1
2
3
4

linux,启动!!!

image-20240205233434998

linux启动成功,进入了命令行。不依赖库的hello_static和依赖动态库的hello_dynamic都执行成功。

至此,Linux系统移植到Orange Pi Zero3开发板圆满完成。

# 参考文章

【S5P6818】XShell串口连接开发板_connecting to com3 connected-CSDN博客 (opens new window)

XShell免费版的安装配置教程以及使用教程(超级详细、保姆级)-CSDN博客 (opens new window)

【Linux命令】fdisk 相关分区命令_fdisk查看分区信息-CSDN博客 (opens new window)

记将嵌入式Linux内核和根文件打包镜像包括u-boot_嵌入式内核和文件系统打包到一起-CSDN博客 (opens new window)

U-Boot--bootcmd和bootargs参数-CSDN博客 (opens new window)

编辑 (opens new window)
#Linux#Linux系统移植#嵌入式
Linux系统移植(四)--- 使用busybox制作根文件系统(rootfs)
gitlab 安装和配置

← Linux系统移植(四)--- 使用busybox制作根文件系统(rootfs) gitlab 安装和配置→

最近更新
01
ESP32-网络摄像头方案
06-14
02
ESP32-PWM驱动SG90舵机
06-14
03
ESP32-实时操作系统freertos
06-14
更多文章>
Theme by Vdoing | Copyright © 2019-2025 DC Wang All right reserved | 辽公网安备 21021102001125号 | 吉ICP备20001966号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式