全志H3 Linux编译尝试

news2024/11/28 8:45:12

全志H3 Linux编译尝试

  1. 主要参考:https://blog.csdn.net/qq_40731414/article/details/118684473
  2. 部分内容介绍来自GPT,但是代码部分都会进行测试

一、简介

Linux编译的作用:

  1. 生成可执行的内核映像:编译Linux内核的主要目的是从源代码生成一个可执行的内核映像(例如,vmlinuz, zImage,
    bzImage等)。

  2. 自定义化:开发者可以通过配置选择哪些功能、驱动和模块应该包括在编译的内核中,从而进行内核的自定义。

  3. 性能优化:开发者可以针对特定的硬件或应用调优内核。

  4. 安全和维护:可以应用特定的安全补丁或者升级到新版本,从而保持系统的安全性。

Linux编译的流程:

  1. 获取源代码:首先,你需要获取Linux内核的源代码。这可以从官方网站 kernel.org 或特定的发行版提供的源代码仓库。
  2. 配置内核:
    使用make menuconfig、make xconfig或其他配置工具选择所需的内核选项。
    这将生成一个.config文件,该文件包含你选择的所有配置选项。
  3. 编译内核:
    使用make命令开始编译过程。
    编译完成后,你会在arch/[your_arch]/boot/目录下找到内核映像(例如zImage或bzImage)。
  4. 编译模块(如果需要的话):
    使用make modules命令编译内核模块。 使用make
    modules_install命令将模块安装到系统的模块目录(通常是/lib/modules/[kernel_version]/)。
  5. 安装内核:
    使用make install命令将内核映像及其他必要的文件(如System.map)安装到/boot目录。
    更新启动加载器配置(例如GRUB),以包含新的内核选项。
  6. 重启系统:最后,重启计算机并在启动加载器中选择新的内核版本。如果一切正常,系统应该会使用新的内核启动。
  7. 注意:在嵌入式系统或特定的场景中,流程可能会略有不同,例如可能需要交叉编译内核,或者需要手动将内核映像和模块复制到目标设备。

二、编译流程

一. 安装交叉编译器

系统使用ubuntu18.04

1. 下载:

从https://download.friendlyelec.com/nanopineo下载编译器arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz

2. 解压:

cd 
mkdir nanopi
cd nanopi
tar -xf arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz

3. 添加路径:

在~/.bashrc中添加该gcc路径,nano ~/.bashrc

# nanopi
# export PIPATH=[your home path]/nanopi/4.9.3
export PIPATH=/home/tju/nanopi/4.9.3
export PATH=$PATH:$PIPATH/bin

4. 验证:

arm-linux-gcc -v

验证成功

5. 注意:

注意在.bashrc中添加的路径,无法在sudo中运行,但可以通过添加完整路径,即/home/tju/nanopi/4.9.3/bin/arm-linux-gcc运行。

6. 作用:

使用交叉编译器的作用是,可以通过高性能x86系统,使用arm-linux-gcc,为H3芯片预编译好一些文件、库和模块。

二. 为SD卡预装一个系统

预装一个系统的作用是,简化了硬盘分区,去除了不重要的操作。
另外,由于还是新手,还不太懂完全从新的SD卡进行全部操作。

1. 下载

从https://download.friendlyelec.com/nanopineo下载系统,下载h3_sd_friendlycore-xenial_4.14_armhf_20210618.img.zip。我使用其他系统,发现无法正常运行。

2. 烧录

使用烧录工具,进行烧录

三. 编译U-boot

U-boot(通常称为"Das U-Boot")是一个流行的开源启动加载器,经常用于嵌入式系统和各种其他设备。U-boot的主要作用是初始化硬件并加载操作系统内核。
U-boot在嵌入式系统中充当了桥梁,负责从设备上电到操作系统启动的过程。编译U-boot的目的是生成一个适用于特定硬件平台的启动加载器,以便正确地初始化硬件并加载操作系统。

1. 下载

cd ~/nanopi/
git clone https://github.com/friendlyarm/u-boot.git -b sunxi-v2017.x --depth 1

2. 编译

sudo apt-get install swig python-dev python3-dev
cd ~/nanopi/u-boot
make nanopi_h3_defconfig ARCH=arm CROSS_COMPILE=arm-linux-
make ARCH=arm CROSS_COMPILE=arm-linux-

成功后生成u-boot-sunxi-with-spl.bin文件,可用于更新SD上的U-boot。

3. 更新

查看SD卡的设备号

lsblk
# 可以看到设备为sdb,并且分成了3个分区和挂在的目录,分别为/media/tju/root/等
cd ~/nanopi/u-boot
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8
sync && eject /dev/sdb

4. 其他

网上说,编译了U-boot后,可以通过串口看到消息和进行操作。有机会再测试一下。

四. 编译Linux内核

编译Linux内核的主要作用:定制化支持:为特定的硬件和应用配置和优化内核。新特性与修复:引入新的驱动、补丁或安全修复。性能优化:去除不必要的模块和功能,使内核更轻量和高效。

1. 下载

cd ~/nanopi/
git clone https://github.com/friendlyarm/linux.git -b sunxi-4.14.y --depth 1

2. 编译

sudo apt-get install u-boot-tools
cd linux
touch .scmversion
make sunxi_defconfig ARCH=arm CROSS_COMPILE=arm-linux-
make zImage dtbs ARCH=arm CROSS_COMPILE=arm-linux-

编译完成后会在arch/arm/boot/目录下生成zImage,并且在arch/arm/boot/dts/目录下生成dtb文件,用于更新SD卡的boot分区

3. 更新zImage和dtb文件

lsblk		# 查看boot挂在目录
cp arch/arm/boot/zImage /media/tju/boot/
cp arch/arm/boot/dts/sun8i-*-nanopi-*.dtb /media/tju/boot/

4. 更新驱动模块

由于使用了sudo,因此CROSS_COMPILE使用完整路径

sudo make modules_install INSTALL_MOD_PATH=/media/tju/rootfs/ ARCH=arm CROSS_COMPILE=/home/tju/nanopi/4.9.3/bin/arm-linux-

该操作可以实现对lib文件夹进行更新。

三. 使用交叉编译器

使用交叉编译器,可以在X86完成对arm的编译

1. 写一个简单的c语言程序,test.cpp

#include <stdio.h>

int main(void) {
  printf("hello\n");

  return 0;

}

2. 进行普通编译和交叉编译

gcc test.cpp -o test1
arm-linux-gcc -o test2

3. 复制到H3上

chmod +x test1 test2

4. 运行测试

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用GPT训练中秋古诗写作讲解

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

Linux CentOS7 lrzsz工具

一、简介 对经常使用linux系统IT人来说&#xff0c;linux系统的文件上传下载是很频繁的&#xff0c;linux默认支持sftp上传下载&#xff0c;CRT等工具集成了SecureFX&#xff0c;Xftp与xshell都可以实现文件的上传下载。今天要介绍的lrzsz是一款在linux里可代替ftp上传和下载的…

开发需知的文件加密与解密

背景 最近团队遇到一个小需求&#xff0c;存在两个系统 A、B&#xff0c;系统 A 支持用户在线制作皮肤包&#xff0c;制作后的皮肤包用户可以下载后&#xff0c;导入到另外的系统 B 上。皮肤包本身的其实就是一个 zip 压缩包&#xff0c;系统 B 接收到压缩包后&#xff0c;解压…

【xshell7】设置语法高亮(突出显示集)方式

设置高亮方式 增加文件路径 将下面内容起名 以.hls结尾&#xff0c;放入截图位置&#xff0c;然后按照步骤一选择即可 [Keyword_0] TermBackColor1 Underline1 Bold0 Strikeout0 Keyword[_a-z0-9-](.[_a-z0-9-])*[a-z0-9-](.[a-z0-9-])* DescriptionEmail address BackColorIn…

本地docker注册证书docker login连接到harbor仓库、利用shell脚本批量将镜像pull、tag、push到私有harbor仓库

1. 本地docker注册证书docker login连接到harbor仓库&#xff1a; 我们使用docker login/push/pull去与Harbor打交道&#xff0c;上传下载镜像等。 但是可能会出现x509: certificate signed by unknown authority之类的错误。 [roottest01 harbor.dev]# docker login harbor.d…

linux和windows选哪个?

linux和windows选哪个&#xff1f; 每年在大学中都会有这么一批学生&#xff1a; 沉浸在安装Linux系统&#xff0c;安装双系统&#xff0c;使用Linux系统看看电影&#xff0c;搞一搞炫酷的桌面效果。 最后收获了啥&#xff1f; 怕是啥也没有&#xff0c;命令学会了几个&…

免费的AI写作软件-智能AI写作工具

我们要谈的话题是AI写作&#xff0c;尤其是免费AI写作&#xff0c;以及147SEOAI写作免费工具。您是否曾经为了创作文章而感到煞费苦心&#xff1f;是否一直在寻找一种能够轻松生成高质量文章的方法&#xff1f; 147GPT批量文章生成工具​www.147seo.com/post/2801.html​编辑ht…

C++运算符优先级一览表

VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&#xff09;https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到精通系列教程&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&a…

CDH集群初始化oozie失败表结构不存在

文章目录 1. 背景2. 初始化数据库2.1 生成表结构2.2 初始化数据库 3. CDH管理页面始化 oozie 服务 1. 背景 安装CDH 6.3.2 版本时初始化集群服务过程中出现oozie server启动失败的情况&#xff0c;第一次创建集群成功&#xff0c;第二次失败了&#xff0c;分析日志信息 SERVER…

基于51单片机多路DTH11温湿度检测控制系统

一、系统方案 1、本设计采用51单片机作为主控器。 2、DHT11采集温度度&#xff0c;支持3路温度度&#xff0c;液晶1602显示。 3、按键设置报警阀值。 4、系统声光报警。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 //初始化LCD*********…

无涯教程-JavaScript - SIGN函数

描述 SIGN功能确定数字的符号。该函数返回- 如果数字为正,则为1 如果数字为0,则零(0) -1,如果数字为负 语法 SIGN (number)争论 Argument描述Required/OptionalNumberAny real number.Required Notes 如果指定的数字未被识别为数字值,则SIGN返回#VALUE!错误。 适用性 …

数据分析与可视化项目技术参考

&#x1f64c;秋名山码民的主页 &#x1f602;oi退役选手&#xff0c;Java、大数据、单片机、IoT均有所涉猎&#xff0c;热爱技术&#xff0c;技术无罪 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 获取源码&#xff0c;添加WX 目录 1. 考核…

科技评估分类

声明 本文是学习GB-T 42776-2023 科技评估分类. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件确立了科技评估的分类原则&#xff0c;描述了分类方法&#xff0c;规定了编码方法、分类与代码。 本文件适用于科技评估的规划、设计、委…

不相同的字符串(挑战字符串中的算法)

此题不容易考虑全部情况&#xff0c;对于未出现字母不够的情况&#xff0c;需要自己模拟假设一下&#xff0c;才会发现处理方法的玄妙 // 分析题目不难发现,这道题其实和字符具体长啥样没关系 // 只和字母的个数有关系,所以我们只需统计字母的个数 // 总体思路分两个情况 // …

【C语言】联合union

类似于struct结构的写法&#xff0c;但是不同的是struct内部的变量都是独立的&#xff0c;但是union的所有成员共享一个空间同一时间只有一个成员是有成效的union的大小是其最大的成员 sizeof(union ...) sizeof(每个成员的最大值)初始化时对第一个成员初始化 union Anelt {i…

SpringMvc参数获取

目录 一、封装为简单数据类型 二、封装为单个对象 &#xff08;1&#xff09;实体类 &#xff08;2&#xff09;控制层 三、封装为关联对象 &#xff08;1&#xff09;实体类 &#xff08;2&#xff09;控制层 &#xff08;3&#xff09;使用表单发送带有参数的请求 四…

8位单片机的优势:永不过时的选择

被广泛应用于各种智能化设备中&#xff0c;8位单片机以其独特的优势&#xff0c;成为了许多应用场景的首选。为什么它们在今天仍然具有重要的应用价值&#xff1f; 一、8位单片机的优势&#xff1a; &#xff08;1&#xff09;成本效益 8位单片机由于其制造成本相对较低&…

如何排版一篇优秀的公众号文章呢?

在这个信息爆炸的时代&#xff0c;微信公众号已经成为人们获取信息的重要渠道之一。然而&#xff0c;如何排版一篇优秀的公众号文章却一直困扰着许多新手和老手。 无论是在校社团新媒体小白&#xff0c;还是新媒体工作者&#xff0c;相信大家对排版界面都不会陌生&#xff0c;…

英国8月CPI意外降温,然而加息决定仍悬而未决

KlipC报道&#xff1a;据英国国家统计局公布最新数据显示&#xff0c;8月CPI同比上涨6.7%&#xff0c;低于上月数据&#xff0c;核心CPI增幅低于经济学家的预测。数据公布后&#xff0c;英镑走弱、英债收益率下跌&#xff0c;英镑应声下跌0.5%至5月以来的最弱水平&#xff0c;两…

Rust : 与C多种交互尝试

rust调用C端的库函数&#xff0c;有很多方法&#xff0c;场景也有所不同。包括windows还是linux&#xff0c;内置库还是自定义库&#xff0c;还是三方库等等。 一、rust调用其内置的C库 这个很简单&#xff0c;直接把extern "C"引入即可&#xff1a; 比如&#xff0…