构建 openEuler Embedded 24.03 LTS (Phytium BSP)

news/2024/11/15 13:39:51/文章来源:https://www.cnblogs.com/EndPoem-ZH/p/18146574

Ubuntu 24.04 构建 openEuler Embedded 24.03 LTS (Phytium BSP)

参考链接:Phytium-OpenEuler-Embedded-BSP - Gitee

1 介绍

本文档介绍如何在Ubuntu 24.04上构建openEuler Embedded 24.03 LTS (Phytium BSP)。对计算机配置有要求。

2 脚本

将以下内容复制到新文件oe_phy.sh,添加权限sudo chmod +x oe_phy.sh,运行./oe_phy.sh即可一键编译:

#!/bin/bash# 安装oebuildsudo apt install python3 python3-pip -y
sudo pip install oebuild --break-system-packages
# 在Ubuntu 24.04中,不加--break-system-packages会报错# 安装dockersudo apt install docker -y
sudo groupadd docker
sudo usermod -a -G docker $(whoami)
sudo systemctl reload docker
sudo systemctl restart docker
sudo chmod o+rw /var/run/docker.sock# 初始化oebuild目录oebuild init -b openEuler-24.03-LTS oe_phy
cd oe_phy && oebuild update# 下载 openeuler-meta-phytiumrm -rf src/yocto-meta-openeuler/bsp/meta-phytium
git clone https://gitee.com/phytium_embedded/phytium-bsp-openeuler-embedded.git  src/yocto-meta-openeuler/bsp/meta-phytium
cp  src/yocto-meta-openeuler/bsp/meta-phytium/phytium.yaml  src/yocto-meta-openeuler/.oebuild/platform/# 支持编译SD卡镜像:在local.conf.sample 里添加变量# vim src/yocto-meta-openeuler/.oebuild/local.conf.sample
# MACHINE_FEATURES += " sd"
# uboot 默认支持4G内存,如果支持2G内存修改如下变量
# vim recipes-bsp/phyuboot/phyuboot.bb
# RAMSIZE="2GB"# 执行构建操作
oebuild generate -p phytium
cd ./build/phytium/# 1. 正常编译:
# oebuild bitbake openeuler-image
# 或(两条指令二选一即可):
# oebuild bitbake phydisk# 2. 带menuconfig的编译:
oebuild bitbake
# 配置menuconfig,比如找到Realtek devices,勾选所有
# 以下需要手动输入:
# bitbake -c menuconfig linux-openeuler
# 然后在图形界面中配置编译选项
# 继续手动输入指令:
# bitbake openeuler-image

注意,根据需求方面是否要配置menuconfig,脚本末尾部分(正常编译)和(带menuconfig的编译)二选一。具体而言:

  1. 若要正常编译,则开放openeuler-image或phydisk的注释,二选一。openEuler-image是编译出内核、设备树、文件系统,可以分别加载。phydisk是包含内核、设备树、文件系统的整体镜像。
  2. 若要在menuconfig中配置,则开放oebuild bitbake的注释。余下部分是在oebuild环境中,需要手动输入。以添加Realtek网卡驱动为例,需要勾选Device Drivers > Network device support > Ethernet driver support > Realtek devices下的各项:
    Realtek Driver

3 在eMMC加载镜像

镜像输出位置:

kernel image和rootfs
<work-directory>/build/phytium/output/xxxxx/
dtb file
<work-directory>/build/phytium/tmp/deploy/images/phytium

通过SD卡加载镜像很简单,用读卡器插入SD卡烧录,插入开发板即可。下面讨论如何在eMMC加载镜像:

3.1 搭建TFTP环境

在与板子同一局域网下的Linux PC(以Ubuntu为例)上运行如下指令:

# 搭建TFTP服务器sudo apt install tftp-hpa tftpd-hpa
sudo apt install xinetd# 创建一个目录存放tftp文件并开放权限
# (使uboot可以从tftpboot中下载文件)mkdir tftpboot
chmod 777 tftpboot

新建文件sudo vim /etc/xinetd.d/tftp,输入如下内容:

server tftp
{socket_type = dgramprotocol    = udpwait        = yesuser        = rootserver      = /usr/sbin/in.tftpdserver_args = -s ~/Work/7-2024/tftpbootdisable     = noper_source  = 11cps         = 100 2flags       = IPv4
}

启动tftp服务:

sudo systemctl start tftpd-hpa

打开sudo vim /etc/default/tftpd-hpa,修改为如下内容(TFTP_DIRECTORY需为绝对路径):

# /etc/default/tftpd-hpaTFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/xilong/Work/7-2024/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"

重启tftp服务器:

sudo systemctl restart tftpd-hpa

3.2 传输镜像Image和设备树dtb文件至开发板

将之前编译生成的Image和dtb文件拷贝到tftpboot文件夹中,并开放权限:

# cp复制各文件
cp Image ~/Work/9-2024/tftpboot
cp e2000q-hanwei-qcore.dtb ~/Work/9-2024/tftpboot# 修改文件夹及所有文件权限(也可逐个修改)
sudo chmod 777 -R ./tftpboot

重启开发板,在uboot界面加载系统镜像和设备树文件:

# 通过TFTP将Image和dtb传输到DRAM中tftp 90000000 192.168.0.10:Image
tftp 80800000 192.168.0.10:e2000q-hanwei-qcore.dtb# 将Image和dtb从DRAM加载到eMMC中(持久存储)
# 其中e53200是Image的大小(十六进制,单位:字节)fatwrite mmc 0:1 90000000 Image e53200
fatwrite mmc 0:1 80800000 e2000q-hanwei-qcore.dtb 6098# 以后每次可以从mmc加载文件:
# fatload mmc 0:1 90000000 Image
# fatload mmc 0:1 80800000 e2000q-hanwei-qcore.dtb# 启动
# booti <Image地址> <initrd地址> <dtb地址>
# 其中initrd地址可不指定,用"-"代替
booti 90000000 - 80800000

注意修改IP地址和dtb文件名。

3.3 加载rootfs(By LA)

  1. openeuler通过TF卡启动。

  2. 把板载的emmc重新分区

    1. 通过fdisk删除/dev/mmcblk0的第二个分区/dev/mmcblk0p2 (mmcblk0p1现在存储了image和dtb,暂时保留了,如果mmcblk0p1足够大,分2个区就足够)
    2. 通过fdisk 在/dev/mmcblk0重新创建分区/dev/mmcblk0p2 大小为10G(只要能放下rootfs就行)
    3. 通过fdisk 在/dev/mmcblk0重新创建分区/dev/mmcblk0p3(大小为mmcblk0剩余的所有空间)

    重新分区完成后效果如下:

    phytium ~ # fdisk /dev/mmcblk0

    The number of cylinders for this disk is set to 954240.
    There is nothing wrong with that, but this is larger than 1024,
    and could in certain setups cause problems with:

    1. software that runs at boot time (e.g., old versions of LILO)
    2. booting and partitioning software from other OSs
      (e.g., DOS FDISK, OS/2 FDISK)

    Command (m for help): p
    Disk /dev/mmcblk0: 29 GB, 31268536320 bytes, 61071360 sectors
    954240 cylinders, 4 heads, 16 sectors/track
    Units: sectors of 1 * 512 = 512 bytes

    Device Boot StartCHS EndCHS StartLBA EndLBA Sectors Size Id Type
    /dev/mmcblk0p1 * 0,32,33 636,67,22 2048 6108975 6106928 2981M b Win95 FAT32
    /dev/mmcblk0p2 1023,3,16 1023,3,16 6108976 27080495 20971520 10.0G 83 Linux
    /dev/mmcblk0p3 1023,3,16 1023,3,16 27080496 61071359 33990864 16.2G 83 Linux

    Command (m for help):

  3. 格式化/dev/mmcblk0p2, /dev/mmcblk0p3

    phytium ~ # mkfs.ext4 /dev/mmcblk0p2
    phytium ~ # mkfs.ext4 /dev/mmcblk0p3

  4. 把rootfs存放到/dev/mmcblk0p2中

    mkdir /home/disk2
    mount -t ext4 /dev/mmcblk0p2 /home/disk2
    scp 用户名@地址:rootfs路径 /home/disk2

    例如 scp user@192.168.1.7:/rootfs/openeuler-image-phytium-20240828023833.rootfs.ext4 /home/disk2

  5. 烧写rootfs到/dev/mmcblk0p3

    dd if=rootfs路径 of=/dev/mmcblk0p3 bs=1M status=progress
    sync

    例如 dd if=/home/disk2/openeuler-image-phytium-20240828023833.rootfs.ext4 of=/dev/mmcblk0p3 bs=1M status=progress

  6. 调整uboot 环境变量
    setenv boot_linux “booti $kernel_addr - $kernel_fdt_addr“
    setenv kernel_name Image
    setenv distro_bootcmd "run load_kernel;run load_fdt;run boot_linux"
    setenv dtb e2000q-hanwei-qcore.dtb
    setenv kernel_fdt_addr 80800000
    setenv kernel_fdt_name "$dtb"
    saveenv

    当前的环境变量如下:
    HANWEI_E2K#printenv
    arch=arm
    baudrate=115200
    board=e2000
    board_name=e2000
    boot_linux=booti 0x90000000 - 80800000
    boot_os=$boottype $kernel_addr -:- $kernel_fdt_addr
    boot_sylixos=bootelf
    bootargs=console=ttyAMA1,115200 audit=0 earlycon=pl011,0x2800d000 root=/dev/mmcblk0p3 rootwait rw
    bootcmd=run distro_bootcmd
    bootdelay=2
    boottype=bootm
    cpu=armv8
    distro_bootcmd=run load_kernel;run load_fdt;run boot_linux
    dtb=e2000q-hanwei-qcore.dtb
    eth0addr=9c:69:b4:c0:44:fb
    eth1addr=9c:69:b4:c0:44:fc
    eth2addr=9c:69:b4:c0:44:fd
    eth3addr=9c:69:b4:c0:44:fe
    ethaddr=9c:69:b4:c0:dc:a0
    fdtcontroladdr=f9c265b0
    fileaddr=90000000
    filesize=e01a00
    gatewayip=192.168.1.1
    ipaddr=192.168.1.101
    kernel_addr=0x90000000
    kernel_fdt_addr=80800000
    kernel_fdt_name=e2000q-hanwei-qcore.dtb
    kernel_name=Image
    load_fdt=load $loadtype 0:1 $kernel_fdt_addr $kernel_fdt_name
    load_kernel=load $loadtype 0:1 $kernel_addr $kernel_name
    loadaddr=0x90000000
    loadtype=mmc
    netdev=eth0
    netmask=255.255.255.0
    serverip=192.168.1.7
    show_pad_ver=1
    usb_install=run usb_install_bootargs;usb start;fatload usb 0:1 0x91000000 Images/Image_initrd;fatload usb 0:1 0x90000000 dtbs/e2000q-hanwei-qcore.dtb;fatload usb 0:1 0x800000000
    usb_install_bootargs=setenv bootargs "console=ttyAMA1,115200 quiet loglevel=0 audit=0 root=/dev/ram rw"
    use_eeprom_mac=1
    vendor=phytium

    Environment size: 1367/4092 bytes

  7. 拔掉TF卡,板卡重新上电可自动进入系统。默认即root登录,首次登录设定密码。

注意:需要把Image和e2000q-hanwei-qcore.dtb提前放到/dev/mmcblk0p1中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/796629.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

架构师备考的一些思考(四)

前言 对于数学,我们之前学的是对的,但不是真的,所以我们没有数学思维。 对于计算机,我们学校教的是对的,但不是真的,所以仅仅从学校学习知识的应届毕业生,不论985,211,本科,专科都一样,都是一张白纸,啥也不会。 案例分析 案例分析是5选3,第一题必答。问题一的类型 …

字符串-面试题

字符串的相关面试题String 的不可变性String底层是一个 final修饰的字符数组,当改变String的值时,会在常量池生成新的字符串,字符数组的地址指向常量池中新的字符串StringBuffer的扩容原理String、StringBuffer、StringBuilder三者对比Strings是不可变的字符序列,底层是一个…

单考一个OCP认证?还是OCP和OCM认证都要考?

​ Oracle的OCP认证是数据库行业非常经典的一个认证,从事数据库行业的人都建考一个 Oracle OCP 认证。 OCP认证内容包括: OCA部分:数据库基础知识、SQL 语言使用、基本的数据库管理技能等,如数据库安装与配置、理解数据库架构、管理数据库实例、备份和恢复,以及使用 SQL 进…

为什么那么多开源软件都用netty来做网络通信编程框架?

1、用netty来做网络通信编程框架而不是我们自己去基于JDK NIO来编程的好处有如下这些: (1)、netty支持常见的应用层协议(如:HTTP、FTP、DNS等),还可以支持自定义协议; (2)、netty可以自动解决网络编程当中的粘包与半包问题; (3)、netty还可以支持流量整形; (4)、netty对…

USB总线-Linux内核USB3.0设备控制器中断处理程序分析(九)

1.概述 USB设备枚举、请求处理、数据交互都涉及USB设备控制器中断。当有事件发生时,USB设备控制器首先将事件信息通过DMA写入到事件缓冲区中,然后向CPU发出中断,随后CPU调用中断处理函数开始处理中断事件。 2.事件 dwc3 USB设备控制器事件使用dwc3_event数据结构描述,由4个…

通义灵码企业代码补全增强使用实践

通义灵码提供了企业代码补全增强的能⼒,在开发者使⽤通义灵码 IDE 插件的⾏间代码补全时,可以结合企业上传的代码库作为上下⽂进⾏⾏间代码补全,使代码补全更加贴合企业代码规范、业务特点。本⽂将分享如何构建⾼质量的企业代码库,以及开发者在前端和后端开发场景的使⽤实践…

LeetCode算法—分治法

纵有疾风起;人生不言弃思路:分治法的核心思想是“分而治之”,即将一个复杂的问题分成多个较小的子问题,分别求解这些子问题,然后将子问题的解合并,得到原问题的解。具体到求众数的问题上,分治法通过递归地将数组分成两部分,分别找出每一部分的众数,最后通过合并步骤来…

学习高校课程-软件设计模式-OOP 和 UML 类图 OOP 与 Java(lec1)

OOP 和 UML 类图 OOP 与 JavaLecture 1:OOP and UML Class DiagramsOOP with Java OOP 和 UML 类图 OOP 与 Java Object-Oriented Programming 面向对象编程Class Hierarchies 类层次结构 Superclass and subclass 超类和子类Pillars of Object-Oriented Programming 面向对象…

路由器刷机踩坑

ssh/telnet 路由器一般是用23端口,也就是telnet。具体如何开启ssh看型号。 breed breed是一个bootloader,在功能上类似于手机的Rec,用于提供一个界面刷入不同分区的镜像(至少不用敲命令行了)。 注意 breed不能用于刷入原厂固件,否则会砖(我就是这么干的)。 这是恩山论坛…

Pbootcms网站挂马解决方案(详细说明)

当你的PbootCMS网站被挂马时,应该立即采取措施来清除恶意代码,并加强系统的安全性,防止未来的攻击。以下是一个详细的解决方案: 1. 备份现有数据 在开始任何修复工作之前,首先备份你的网站数据,包括数据库和文件系统。这一步骤是为了防止在修复过程中丢失重要数据。 2. 检…

SVN在MacOS下报E230001错误

#macos #rider for Mac #SVN #E230001svn为什么会报E230001错误呢?根据详细错误信息Server SSL certificate verification failed: certificate issued知道这是https证书有问题,不用管它证书了,这里介绍一种简单的方法。 首先,打开终端(terminal,mac os/linux一般都是带…

面试-JS Web API - 存储

cookie HTML5存储(localStorage 和 sessionStorage)cookie cookie本身用于浏览器和server通讯的,被借用到本地存储来。可以用document.cookie来修改。同一个变量会覆盖,不同变量会追加。localStorage 和 sessionStorage// 保存数据到 localStorage localStorage.getItem(a,10…