buildroot构建hisi平台根文件系统和工具链

news/2024/11/9 4:47:35/

buildroot构建hisi平台根文件系统和工具链

前面使用了arm-hisiv300-linux 工具链来作为Buildroot的外部工具链进行编译,然后遇到了很多编译问题。

https://blog.csdn.net/duapple/article/details/128516133?spm=1001.2014.3001.5501

这里不使用hisi的工具链,我们还是选择外部工具链,从远程下载工具链并安装。编译过程一切顺利,除了有的包下载非常缓慢以后,没有再报任何的编译问题,这里做个记录。

1. 下载最新源码

2. Menuconfig配置

Target options

在这里插入图片描述

Toolchain

在这里插入图片描述

可选的只有三种,直接选择ARM 2014.5

在这里插入图片描述

System configuration

在这里插入图片描述

Filesystem images

在这里插入图片描述

3. 编译及测试

sudo make

一切顺利。最后工具链会生成在output/host/opt/ext-toolchain 目录下。

duapple@92fa1c7e1a00:/media/data/workspace/buildroot-2022.02.8/output/host/opt/ext-toolchain$ ls 
arm-none-linux-gnueabi  bin  i686-pc-linux-gnu  lib  libexec  share
duapple@92fa1c7e1a00:/media/data/workspace/buildroot-2022.02.8/output/host/opt/ext-toolchain$ ls bin 
arm-none-linux-gnueabi-addr2line  arm-none-linux-gnueabi-cs         arm-none-linux-gnueabi-gcc-ar      arm-none-linux-gnueabi-ld       arm-none-linux-gnueabi-size
arm-none-linux-gnueabi-ar         arm-none-linux-gnueabi-cs-daemon  arm-none-linux-gnueabi-gcc-nm      arm-none-linux-gnueabi-nm       arm-none-linux-gnueabi-strings
arm-none-linux-gnueabi-as         arm-none-linux-gnueabi-elfedit    arm-none-linux-gnueabi-gcc-ranlib  arm-none-linux-gnueabi-objcopy  arm-none-linux-gnueabi-strip
arm-none-linux-gnueabi-c++        arm-none-linux-gnueabi-g++        arm-none-linux-gnueabi-gcov        arm-none-linux-gnueabi-objdump  cache
arm-none-linux-gnueabi-c++filt    arm-none-linux-gnueabi-gcc        arm-none-linux-gnueabi-gdb         arm-none-linux-gnueabi-ranlib
arm-none-linux-gnueabi-cpp        arm-none-linux-gnueabi-gcc-4.8.3  arm-none-linux-gnueabi-gprof       arm-none-linux-gnueabi-readelf

通过设置环境变量就能直接使用这个工具链了。然后可以用这个工具链来编译Hi SDK中的linux-3.4内核。

export PATH=$PATH:/media/data/workspace/buildroot-2022.02.8/output/host/opt/ext-toolchain/bin
cp arch/arm/configs/hi3518ev200_full_defconfig .config
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage -j12

最后烧录uImagerootfs.jffs2

我这里烧录使用arm-hisiv300-linux 工具链编译的内核,arm-none-linux-gnueabi 工具链编译根文件系统,系统也是能够直接启动并运行成功的。

tips:最后测试发现,还是不使用hisi的编译工具链编译Buildroot根文件系统比较好。这样,编译过程都不报错,十分的顺利。

4. 集成Hi SDK中的kernel

尝试使用buildroot编译内核,试了3.4到5.10的内核,5.0以下的内核可以编译通过,但是烧录后无法启动,应该是hisi对该版本的内核做了适配的,因此无法直接使用官方的kernel版本。最后还是使用buildroot生成的工具链编译Hi SDK中的内核。

但是可以把Hi SDK中的kernel集成到Buildroot中去。这样还能解决根文件系统启动后,/lib/module下面没有内核模块的问题。另外还可以解决squashfs根文件系统启动无法创建/dev/console以及其它设备的问题,由于Buildroot识别不到kernel的配置,因此devtmpfs无法生效,导致devtmpfs没有挂载到/dev上。

先把kernel打包成.tar.xz格式的文件。

tar cvf linux-3.4.y.tar linux-3.4.y
xz -z linux-3.4.y.tar -0

然后将打包好的kernel放到Buildroot中去:

sudo cp linux-3.4.y.tar.xz /media/data/workspace/buildroot-2022.02.8/dl/linux/

最后需要配置Buildroot编译kernel,设置自定义版本:

在这里插入图片描述

然后保存配置并退出,重新编译即可。这是将使用Buildroot生成的工具链编译Hi SDK中的Linux内核。编译完成之后,会在output/images 下生成我们的uImage文件 。这时通过tftp烧录uImagerootfs.jffs2

在这里插入图片描述

此时能够发现,启动不会报/lib/modules 的错误了,并且可加载的ko文件也被放到了对应的位置。另外,kernel中配置的devtmpfs也生效了,devtmpfs目录挂载到了/dev下。按理来说,squashfs启动也能够正常了,不会因为无法在/dev下面创建/dev/console 而报错进不了console了。

squashfs测试

在这里插入图片描述

OK,启动正常。

# cat /proc/version
Linux version 3.4.35 (root@92fa1c7e1a00) (collect2: error: ld returned 1 exit status) #3 Mon Jan 2 23:44:06 CST 2023
# uname -a
Linux buildroot 3.4.35 #3 Mon Jan 2 23:44:06 CST 2023 armv5tejl GNU/Linux
# cat /usr/lib/os-release
NAME=Buildroot
VERSION=2022.02.8
ID=buildroot
VERSION_ID=2022.02.8
PRETTY_NAME="Buildroot 2022.02.8"
#

http://www.ppmy.cn/news/8978.html

相关文章

前端框架搭建(九)搭建页面布局框架【vite】

1.创建目录 BasicLayout——全局布局 components——布局组件 GlobalContent:全局内容GlobalHeader:全局头部页面 2.处理GlobalHeader 创建HeaderMenu——头部菜单 声明相关类型 在typings目录下创建system.d.ts declare namespace App {/** 全局头…

(一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>

一、工作环境及项目简介 立创EDA:硬件原理图及PCB绘制。 全志F1C200S:F1C100S内置32MB DDR1内存,F1C200S内置64MB DDR1内存。 原理图:参考开源项目,详见墨云, 详见peng-zhihui。 核心板:四层…

【华为OD机试真题2023 JAVA】寻找关键钥匙

华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 寻找关键钥匙 知识点字符串编程基础正则表达式排序 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 小强正在参加《密室逃生》游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母组成)的箱子,并…

BEV视觉3D感知算法梳理

1. 基于BEV空间的自动驾驶感知任务 最近,基于BEV空间下的感知任务已经涌现出了众多优秀算法,并在多个自动驾驶公开数据集(KITTI,Waymo,nuScenes)上取得了非常不错的成绩。根据自动驾驶汽车上安装的传感器类…

自动驾驶专题介绍 ———— 摄像头

文章目录介绍工作原理实现功能分类按通信协议区分按不同感光芯片按像元排列方式介绍 摄像头可以采集汽车周边的图像信息,跟人类的眼睛最为接近。摄像头可以拥有较广的视场角、较大的分辨率,还可以提供颜色和纹理等信息。这些信息对于实现自动驾驶功能是存…

软件测试[用例篇]

一. 回顾测试用例 1.测试用例基本要素 测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合。 这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素。 2.测试用例好处 测试用例可以提高测试效率(可以减…

Docker简介

Docker官网链接: http://docker.p2hp.com/问题:我们开发的嵌入式项目基本是基于虚拟机下的ubuntu的,如果每一个项目要求的系统版本、库版本、交叉编译工具链等不一样,我们就需要为每一个项目安装一个对应的ubuntu,这既…

linphone android sdk 源码下载编译

前言 前面的有写过Android 使用Linphone SDK开发SIP客户端相关的文章, 在后续的开发过程中, 为了更深入了解linphone, 便尝试下载SDK源码自行编译. 关于linphone这里不作过多介绍, 可以参考前面的文章. Linphone-SDK 是一个将 Liblinphone 及其依赖项捆绑为 git 子模块的项目&a…