开源Linux社区Armbian开发指南

news2024/9/29 9:24:58

1. 什么是armbian

Armbian是一个基于Debian或Ubuntu的开源操作系统,专门针对嵌入式ARM平台进行优化和定制。Armbian可以运行在多种不同的嵌入式设备上,例如树莓派、ArmSoM、香蕉派等等。Armbian针对不同的嵌入式平台,提供了相应的硬件支持,可以让用户轻松地在这些平台上搭建自己的嵌入式系统。

armbian立项于2014年底,于2016年开始进入频繁更新,每年千万行代码的爆发式成长,截止目前为止,官网已经支持185个不同的硬件设备的适配。

2. 为什么要使用armbian

Armbian提供了丰富的软件库和组件,包括Linux内核、文件系统、应用程序等,用户可以根据自己的需要进行选择和安装。Armbian还提供了一套完整的开发工具链,方便用户进行开发和调试工作。

总的来说,Armbian是一款功能强大、灵活性高、易于定制的嵌入式操作系统,适用于各种不同的嵌入式设备和应用场景。

3. 如何使用armbian

3.1 基本要求

  • x86_64 或 aarch64 计算机,至少具有 2GB 内存和 ~35GB 磁盘空间,用于虚拟机、WSL2、容器或裸机安装
  • Ubuntu Jammy 22.04.x amd64 或 aarch64 用于本机构建或任何支持 Docker 的 amd64 / aarch64 Linux 用于容器化。官方支持的编译环境仅限 Ubuntu Jammy 22.04.x amd64 !
  • 超级用户权限(配置的 sudo 或 root 访问权限)。
  • 确保您的所有系统组件都是最新的。例如,过时的 Docker 二进制文件可能会导致问题。
  • 很多资源包下载都需要外网,中国的用户需要一个翻墙工具

3.2 开始构建

$ apt-get -y install git
$ git clone --depth=1 --branch=main https://github.com/armbian/build
$ cd build
$ ./compile.sh

命令执行后会进行以下三个操作,具体的操作解释,后续我会写文章详细解释

  • 交互式图形界面。
  • 通过安装必要的依赖项和源来准备工作区。
  • 它指导整个过程并创建内核包或即用型 SD 卡映像。

4. 项目结构

├── cache                                Work / cache directory
│   ├── aptcache                         Packages
│   ├── ccache                           C/C++ compiler
│   ├── docker                           Docker last pull
│   ├── git-bare                         Minimal Git
│   ├── git-bundles                      Full Git
│   ├── initrd                           Ram disk
│   ├── memoize                          Git status
│   ├── patch                            Kernel drivers patch
│   ├── pip                              Python
│   ├── rootfs                           Compressed userspaces
│   ├── sources                          Kernel, u-boot and other sources
│   ├── tools                            Additional tools like ORAS
│   └── utility
├── config                               Packages repository configurations
│   ├── targets.conf                     Board build target configuration
│   ├── boards                           Board configurations
│   ├── bootenv                          Initial boot loaders environments per family
│   ├── bootscripts                      Initial Boot loaders scripts per family
│   ├── cli                              CLI packages configurations per distribution
│   ├── desktop                          Desktop packages configurations per distribution
│   ├── distributions                    Distributions settings
│   ├── kernel                           Kernel build configurations per family
│   ├── sources                          Kernel and u-boot sources locations and scripts
│   ├── templates                        User configuration templates which populate userpatches
│   └── torrents                         External compiler and rootfs cache torrents
├── extensions                           Extend build system with specific functionality
├── lib                                  Main build framework libraries
│   ├── functions
│   │   ├── artifacts
│   │   ├── bsp
│   │   ├── cli
│   │   ├── compilation
│   │   ├── configuration
│   │   ├── general
│   │   ├── host
│   │   ├── image
│   │   ├── logging
│   │   ├── main
│   │   └── rootfs
│   └── tools
├── output                               Build artifact
│   └── deb                              Deb packages
│   └── images                           Bootable images - RAW or compressed
│   └── debug                            Patch and build logs
│   └── config                           Kernel configuration export location
│   └── patch                            Created patches location
├── packages                             Support scripts, binary blobs, packages
│   ├── blobs                            Wallpapers, various configs, closed source bootloaders
│   ├── bsp-cli                          Automatically added to armbian-bsp-cli package
│   ├── bsp-desktop                      Automatically added to armbian-bsp-desktopo package
│   ├── bsp                              Scripts and configs overlay for rootfs
│   └── extras-buildpkgs                 Optional compilation and packaging engine
├── patch                                Collection of patches
│   ├── atf                              ARM trusted firmware
│   ├── kernel                           Linux kernel patches
|   |   └── family-branch                Per kernel family and branch
│   ├── misc                             Linux kernel packaging patches
│   └── u-boot                           Universal boot loader patches
|       ├── u-boot-board                 For specific board
|       └── u-boot-family                For entire kernel family
├── tools                                Tools for dealing with kernel patches and configs
└── userpatches                          User: configuration patching area
    ├── lib.config                       User: framework common config/override file
    ├── config-default.conf              User: default user config file
    ├── customize-image.sh               User: script will execute just before closing the image
    ├── atf                              User: ARM trusted firmware
    ├── kernel                           User: Linux kernel per kernel family
    ├── misc                             User: various
    └── u-boot                           User: universal boot loader patches
 CONTRIBUTING.md // We would love to have you join the Armbian 

接下来会详细拆解开发步骤,本文讲带大家熟悉如何编译出自己想要的板级固件,armbian开发指北(三)会更加详细的带大家深入代码。

1. 编译

进入项目目录执行:

$ ./compile.sh

执行脚本后会提示

[] Docker is installed, but not usable [ can't use Docker; check your Docker config / groups / etc ]
[] Problem detected [ Docker installed but not usable ]
[] Exiting in 10 seconds [ Press <Ctrl-C> to abort, <Enter> to ignore and continue ]
Counting down: 9... 8... 

armbian支持 docker环境编译,执行脚本后提示我们目前是docker环境是没有搭建好的,我们暂时不使用docker,按enter键即可

后提示输入权限密码 [sudo] password for jackson:

2. 选择是否更改kernel config

此时可看到两个选择

  • Do not change the kernel configuration
  • Show a kernel configuration menu before comilation
  1. 选项为不更改kernel配置
  2. 选项为在编译前可自行更改kernel配置

我们暂且先选择 Do not change the kernel configuration 不去更改内核配置,按enter键。

3. 选择目标

大家下载下来的 armbian/build 应该是没有armsom-w3 和 armsom-p2pro, 是我们这边开发使用暂时没有合并提交到armbian官方仓库,后续会提交。

除此以上承列的板子都是目前官方支持的,我们可以选择自己需要编译的板子固件 ,细心的朋友可能会注意到底部除了 ok,Cancel,还有一个 show CSC/WIP/EOS/TVB 选项

CSC/WIP/EOS/TVB 解释:
CSC: 社区支持的配置,社区贡献的支持。Armbian 开发团队没有官方支持
WIP:正在进行中,基本功能可以测试,但尚未准备好投入生产。
EOS:生命周期结束,支持结束。
TVB:TV 电视盒子版本

我这边选择 armsom-w3 :Rockchip RK3588 SoC octa core 8-32GB SoC 2.5GBe PoE eMMC USB3 NvME

4. 选择要使用什么kernel版本

如上我们可以看到Legacy版本,edge版本,midstream版本,collabora版本

Legacy版本:旧的kernel版本,大概率是各个芯片厂家官方支持的kernel
edge版本:最新主线的kernel
midstream版本:介于主线mainline 和 rk官网legacy版本之间。
collabora版本:Collabora's rk3588, where the action is these days

对于后面两个版本是开发者自己客制化的版本,可以自定义任何版本,armbian在这方面做的非常弹性。

选择自己想要编译的kernel版本,这边选legacy

5. 选择目标操作系统

如上我们可以看到

  • bookworm Debian12 Bookworm
  • bullseys Debian11 Bullseye
  • jammy Ubuntu jammy 22.04 LTS

其实就是各种os版本,系统之间的差别可自行上网了解,选择你喜欢的,这边选择bullseye

6. 选择目标系统类型(是否带桌面系统)

Image with console interface (server版本) Image with desktop environment 桌面版本

开发验证阶段可用server版本编译的更快一些,需要验证显示接口建议用desktop版本

6.1 选择目标系统带桌面版本

假如选择desktop版本将会进入

cinnamon Cinnamon desktopp environment:

Cinnamon 是一款 Linux 桌面,提供先进的创新功能和传统的用户体验。
桌面布局类似于 Gnome 2,其底层技术源自 Gnome Shell。Cinnamon 提供易于使用且舒适的桌面体验,让用户有宾至如归的感觉。

gnome Gnome desktop enviroment:

GNOME是一套纯粹自由的计算机软件,运行在操作系统上,提供图形桌面环境。
桌面环境具有简洁、自定义性高、多任务支持、丰富的应用程序和开放性等特点,适合那些注重用户体验、个性化和开放性的用户。

i3-wm I3-wm desktop enviroment

平铺式桌面实在是太棒了!也许你习惯了KDE、Gnome、Xfce、Cinammon这些主流桌面后可以尝试一下

xfce Xfce desktop enviroment

Xfce 是一个以速度、性能和资源效率为重点的轻量级桌面环境。它在不牺牲功能的情况下,提供了一个干净直观的用户界面。它采用了经过时间验证的、传统的图标和菜单驱动的用户界面,对提高生产力非常有效。此外,Xfce 还允许用户根据自己的偏好进行个性化设置。

我们偏好采用 gnome desktop,纯属个人喜好。

之后会要求选择我们需要安装的软件,根据自己喜好选择,可多选。

6.2 选择目标系统server版本

Standard image with console interface:标准server版本

Minimal image with console interface:最小server版本

两者具体的差别,暂未深入

7. 总结

至此已经选择完所有配置开始编译,编译过程中大家可注意到

Repeat Build Options (early) [./compile.sh build BOARD=armsom-w3 BRANCH=legacy BUILD_DESKTOP=yes BUILD_MINIMAL=no DESKTOP_APPGROUPS_SELECTED='3dsupport browsers chat desktop_tools editors internet multimedia office programming remote_desktop' DESKTOP_ENVIRONMENT=gnome DESKTOP_ENVIRONMENT_CONFIG_NAME=config_base KERNEL_CONFIGURE=no RELEASE=bullseye ]

其中./compile.sh 后面的参数便是我们所有的选择,后续开发如果不想用图形页面选择,可直接输入以上命令

假设我们现在需要把Banana Pi 与armsom团队开发的Banana Pi BPI-W3(armsom-w3)

1. board.config 板级配置

$ armsom/armbian/build/config/boards

改目录下存放目前armbian支持的board,首先我们要建立自己的config armsom-w3.config, show code no bb

# Rockchip RK3588 SoC octa core 8-32GB SoC 2.5GBe PoE eMMC USB3 NvME 
// 这行是我们执行编译脚本后,选择哪个boader后面的描述,可自行更改
BOARD_NAME="ArmSoM W3" 
// 板子名称
BOARDFAMILY="rockchip-rk3588" 
// rockchip-rk3588 文件在config/sources/families/rockchip-rk3588.conf,里面有详细的板子kernel,uboot下载链接,各种配置
BOARD_MAINTAINER="armsom-team"
// 板子的维护者名称
BOOTCONFIG="rock-5b-rk3588_defconfig"
// uboot的config
KERNEL_TARGET="legacy,edge,midstream,collabora"
// kernel支持哪些版本
KERNEL_TEST_TARGET="legacy" # in case different then kernel target
FULL_DESKTOP="yes"
BOOT_LOGO="desktop"
BOOT_FDT_FILE="rockchip/rk3588-rock-5b.dtb"
BOOT_SCENARIO="spl-blobs"
BOOT_SUPPORT_SPI="yes"
BOOT_SPI_RKSPI_LOADER="yes"
IMAGE_PARTITION_TABLE="gpt"
SKIP_BOOTSPLASH="yes" # Skip boot splash patch, conflicts with CONFIG_VT=yes
BOOTFS_TYPE="ext4"

function post_family_tweaks__rock5b_naming_audios() {
	display_alert "$BOARD" "Renaming rock5b audios" "info"

	mkdir -p $SDCARD/etc/udev/rules.d/
	echo 'SUBSYSTEM=="sound", ENV{ID_PATH}=="platform-hdmi0-sound", ENV{SOUND_DESCRIPTION}="HDMI0 Audio"' > $SDCARD/etc/udev/rules.d/90-naming-audios.rules
	echo 'SUBSYSTEM=="sound", ENV{ID_PATH}=="platform-hdmi1-sound", ENV{SOUND_DESCRIPTION}="HDMI1 Audio"' >> $SDCARD/etc/udev/rules.d/90-naming-audios.rules
	echo 'SUBSYSTEM=="sound", ENV{ID_PATH}=="platform-hdmiin-sound", ENV{SOUND_DESCRIPTION}="HDMI-In Audio"' >> $SDCARD/etc/udev/rules.d/90-naming-audios.rules
	echo 'SUBSYSTEM=="sound", ENV{ID_PATH}=="platform-dp0-sound", ENV{SOUND_DESCRIPTION}="DP0 Audio"' >> $SDCARD/etc/udev/rules.d/90-naming-audios.rules
	echo 'SUBSYSTEM=="sound", ENV{ID_PATH}=="platform-es8316-sound", ENV{SOUND_DESCRIPTION}="ES8316 Audio"' >> $SDCARD/etc/udev/rules.d/90-naming-audios.rules

	return 0
}

以上boards配置均可在config/boards/README.md文件查看详细解释

lib/functions/artifacts/artifacts-obtain.sh 去掉413行的else,确保每次都会拉kernel uboot到 cache目录,方便开发 artifact_exists_in_remote_cache=no

查看单独编译kernel命令,output里面的log,

把sd卡固件烧录到emmc nand-sata-install

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

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

相关文章

计算机网络第3章-运输层(2)

可靠数据传输原理 可靠数据传输依靠数据在一条可靠信道上进行传输。 TCP也正是依靠可靠信道进行传数据&#xff0c;从而数据不会被丢失。 而实现这种可靠数据传输服务是可靠数据传输协议的责任 构造可靠数据传输协议 1.经完全可靠信道的可靠数据传输&#xff1a;rdt1.0 在…

SpringSecurity分布式安全框架

Spring Security是一个基于Spring框架的安全框架&#xff0c;它提供了全面的安全解决方案&#xff0c;包括用户认证和用户授权等Web应用安全性问题。Spring Security可以轻松扩展以满足自定义需求&#xff0c;它的真正强大之处在于它可以轻松扩展以满足自定义要求。 对于分布式…

php使用阿里云文本内容检测openapi-sdk-php

文章目录 前言一、下载sdk1.1 windows系统安装 composer1.2 使用composer安装阿里云sdk 二、新加php文件调用审核接口2.1、创建一个php文件 前言 最近有个非常简单的项目&#xff0c;需要对用户输入的文本进行内容审核&#xff0c;直接使用阿里云接口机审一下就OK了 阿里云文…

苍穹外卖-01

苍穹外卖-01 课程内容 软件开发整体介绍苍穹外卖项目介绍开发环境搭建导入接口文档Swagger 项目整体效果展示&#xff1a; ​ 管理端-外卖商家使用 ​ 用户端-点餐用户使用 当我们完成该项目的学习&#xff0c;可以培养以下能力&#xff1a; 1. 软件开发整体介绍 作为一名…

FSL 6.07安装

本来已经不想再用FSL&#xff0c;貌似还是避不开&#xff0c;过了两年多&#xff0c;有安装了FSL&#xff0c;安装教程满大街&#xff0c;这里只是说一下变化&#xff0c;貌似&#xff0c;最新得6.0.7安装文件不限制python2了。 然后安装过程会先安装一个miniconda环境&#xf…

人工智能基础_机器学习001_线性回归_多元线性回归_最优解_基本概念_有监督机器学习_jupyter notebook---人工智能工作笔记0040

线性和回归,就是自然规律,比如人类是身高趋于某个值的概率最大,回归就是通过数学方法找到事物的规律. 机器学习作用: 该专业实际应用于机器视觉、指纹识别、人脸识别、视网膜识别、虹膜识别、掌纹识别、专家系统、自动规划、智能搜索、定理证明、博弈、自动程序设计、智能控制…

牛客网刷题-(3)

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

【JavaEE】网络原理---TCP协议的易懂图文详解(确认应答、超时重传、连接管理、滑动窗口、流量控制)

一、TCP协议 TCP&#xff0c;即Transmission Control Protocol&#xff0c;传输控制协议。人如其名&#xff0c;要对数据的传输进行一个详细的控制。 1.1 TCP协议格式 &#xff08;为了方便排版这样化的&#xff0c;我们从上到下依次理解&#xff09; 二、TCP原理 2.1 确…

Luckyexcel 加载 springboot 后台返回的 excel 文件并显示

&#x1f451; 博主简介&#xff1a;知名开发工程师 &#x1f463; 出没地点&#xff1a;北京 &#x1f48a; 2023年目标&#xff1a;成为一个大佬 ——————————————————————————————————————————— 版权声明&#xff1a;本文为原创文…

竞赛选题 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满…

不希望你的数据在云中?关闭iPhone或Mac上的iCloud

​如果你不想使用iCloud&#xff0c;可以很容易地从设备设置中选择退出并关闭它。当你禁用iCloud时&#xff0c;它会删除该设备对iCloud的访问&#xff0c;但不会删除苹果服务器上的任何数据。我们将在本文末尾向你展示如何做到这一点。 注销iCloud并完全禁用它 如果你根本不…

自学web前端怎么练项目?

前言 对于刚开始看视频敲代码&#xff0c;最忌讳的便是一上来就完全照着视频做&#xff0c;这么做就算完完全全的跟着视频做出来一个项目&#xff0c;始终都无法将里面具体的知识化为己有&#xff0c;单纯来说只是简单的复刻&#xff0c;视频的作者本身是不会对他在做该项目过…

Springboot+vue的医患档案管理系统。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的医患档案管理系统。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的医患档案管理系统&#xff0c;采用M&#xff08;model&#xff09;V&#xff08;view&am…

信钰证券:华为汽车概念股持续活跃 圣龙股份斩获12连板

近期&#xff0c;华为轿车概念股在A股商场遭到热捧&#xff0c;多只股票迭创前史新高。10月23日&#xff0c;华为轿车概念股再度走强&#xff0c;到收盘&#xff0c;板块内圣龙股份、银宝山新涨停&#xff0c;轿车ETF在重仓股提振下盘中一度上涨近2%。业界人士认为&#xff0c;…

Mysql事务+redo日志+锁分类+隔离级别+mvcc

事务&#xff1a; 是数据库操作的最小工作单元&#xff0c;是作为单个逻辑工作单元执行的一系列操作&#xff1b;这些操作作为一个整体一起向系统提交&#xff0c;要么都执行、要么都不执行&#xff1b;事务是一组不可再分割的操作集合&#xff08;工作逻辑单元&#xff09;&a…

NetCore IIS Redis JMeter 登录压力测试

近期&#xff0c;由于某项目验收需要&#xff0c;需要登录接口同时满足至少400个账号同时并发登录&#xff0c;于是开始编写测试代码&#xff0c;以满足项目业务需要。首先&#xff0c;安装jdk&#xff0c;由于本机已安装jdk8&#xff1a; 如果你机器上没有安装jdk&#xff0c;…

php简单后门实现及php连接数据库

php简单后门实现 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>easybackdoor</title>…

vue项目中内嵌iframe,打包上线时候iframe地址如何写?

vue项目中内嵌iframe&#xff0c;打包上线时候iframe地址如何写 一、项目结构1.内嵌的iframe文件位置2.打包后的iframe的位置 二、代码 前提描述&#xff0c;项目是用webpack打包的&#xff0c;内嵌一个完整的js小组件 一、项目结构 1.内嵌的iframe文件位置 2.打包后的iframe的…

Centos8: 安装python2, 并设置默认版本

文章目录 原本centos上已经有python3.6了&#xff0c;因为要运行旧代码&#xff0c;需要安装python2版本。 #在CentOS 8上安装Python 2 sudo dnf install python2#设置默认Python版本 python2 sudo alternatives --set python /usr/bin/python2#设置默认Python版本 python3 sud…

互联网Java工程师面试题·Spring篇·第三弹

目录 ​编辑 4、注解 4.1、什么是基于注解的容器配置 4.2、如何在 spring 中启动注解装配&#xff1f; 4.3、Component, Controller, Repository,Service 有何区别&#xff1f; 4.4、Required 注解有什么用&#xff1f; 4.5、Autowired 注解有什么用&#xff1f; 4.6、…