开源linux开发板,linux开源项目
墨初 知识笔记 111阅读
Armbian是一个基于Debian或Ubuntu的开源操作系统专门针对嵌入式ARM平台进行优化和定制。Armbian可以运行在多种不同的嵌入式设备上例如树莓派、ArmSoM、香蕉派等等。Armbian针对不同的嵌入式平台提供了相应的硬件支持可以让用户轻松地在这些平台上搭建自己的嵌入式系统。
armbian立项于2014年底于2016年开始进入频繁更新每年千万行代码的爆发式成长截止目前为止官网已经支持185个不同的硬件设备的适配。

Armbian提供了丰富的软件库和组件包括Linux内核、文件系统、应用程序等用户可以根据自己的需要进行选择和安装。Armbian还提供了一套完整的开发工具链方便用户进行开发和调试工作。
总的来说Armbian是一款功能强大、灵活性高、易于定制的嵌入式操作系统适用于各种不同的嵌入式设备和应用场景。

$ apt-get -y install git$ git clone --depth1 --branchmain 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 [ cant 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 configurationShow a kernel configuration menu before comilation 选项为不更改kernel配置选项为在编译前可自行更改kernel配置我们暂且先选择 Do not change the kernel configuration 不去更改内核配置按enter键。
3. 选择目标大家下载下来的 armbian/build 应该是没有armsom-w3 和 armsom-p2pro, 是我们这边开发使用暂时没有合并提交到armbian官方仓库,后续会提交。
除此以上承列的板子都是目前官方支持的我们可以选择自己需要编译的板子固件 ,细心的朋友可能会注意到底部除了 okCancel还有一个 show CSC/WIP/EOS/TVB 选项
CSC/WIP/EOS/TVB 解释CSC: 社区支持的配置社区贡献的支持。Armbian 开发团队没有官方支持WIP正在进行中基本功能可以测试但尚未准备好投入生产。EOS生命周期结束支持结束。TVBTV 电视盒子版本
我这边选择 armsom-w3 Rockchip RK3588 SoC octa core 8-32GB SoC 2.5GBe PoE eMMC USB3 NvME
4. 选择要使用什么kernel版本如上我们可以看到Legacy版本edge版本midstream版本collabora版本
Legacy版本旧的kernel版本大概率是各个芯片厂家官方支持的kerneledge版本最新主线的kernelmidstream版本介于主线mainline 和 rk官网legacy版本之间。collabora版本Collaboras rk3588, where the action is these days
对于后面两个版本是开发者自己客制化的版本可以自定义任何版本armbian在这方面做的非常弹性。
选择自己想要编译的kernel版本这边选legacy
5. 选择目标操作系统如上我们可以看到
bookworm Debian12 Bookwormbullseys Debian11 Bullseyejammy 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 BOARDarmsom-w3 BRANCHlegacy BUILD_DESKTOPyes BUILD_MINIMALno DESKTOP_APPGROUPS_SELECTED3dsupport browsers chat desktop_tools editors internet multimedia office programming remote_desktop DESKTOP_ENVIRONMENTgnome DESKTOP_ENVIRONMENT_CONFIG_NAMEconfig_base KERNEL_CONFIGUREno RELEASEbullseye ]
其中./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_NAMEArmSoM W3 // 板子名称BOARDFAMILYrockchip-rk3588 // rockchip-rk3588 文件在config/sources/families/rockchip-rk3588.conf里面有详细的板子kerneluboot下载链接各种配置BOARD_MAINTAINERarmsom-team// 板子的维护者名称BOOTCONFIGrock-5b-rk3588_defconfig// uboot的configKERNEL_TARGETlegacy,edge,midstream,collabora// kernel支持哪些版本KERNEL_TEST_TARGETlegacy # in case different then kernel targetFULL_DESKTOPyesBOOT_LOGOdesktopBOOT_FDT_FILErockchip/rk3588-rock-5b.dtbBOOT_SCENARIOspl-blobsBOOT_SUPPORT_SPIyesBOOT_SPI_RKSPI_LOADERyesIMAGE_PARTITION_TABLEgptSKIP_BOOTSPLASHyes # Skip boot splash patch, conflicts with CONFIG_VTyesBOOTFS_TYPEext4function post_family_tweaks__rock5b_naming_audios() {display_alert $BOARD Renaming rock5b audios infomkdir -p $SDCARD/etc/udev/rules.d/echo SUBSYSTEMsound, ENV{ID_PATH}platform-hdmi0-sound, ENV{SOUND_DESCRIPTION}HDMI0 Audio > $SDCARD/etc/udev/rules.d/90-naming-audios.rulesecho SUBSYSTEMsound, ENV{ID_PATH}platform-hdmi1-sound, ENV{SOUND_DESCRIPTION}HDMI1 Audio >> $SDCARD/etc/udev/rules.d/90-naming-audios.rulesecho SUBSYSTEMsound, ENV{ID_PATH}platform-hdmiin-sound, ENV{SOUND_DESCRIPTION}HDMI-In Audio >> $SDCARD/etc/udev/rules.d/90-naming-audios.rulesecho SUBSYSTEMsound, ENV{ID_PATH}platform-dp0-sound, ENV{SOUND_DESCRIPTION}DP0 Audio >> $SDCARD/etc/udev/rules.d/90-naming-audios.rulesecho SUBSYSTEMsound, ENV{ID_PATH}platform-es8316-sound, ENV{SOUND_DESCRIPTION}ES8316 Audio >> $SDCARD/etc/udev/rules.d/90-naming-audios.rulesreturn 0}
以上boards配置均可在config/boards/README.md文件查看详细解释
lib/functions/artifacts/artifacts-obtain.sh 去掉413行的else确保每次都会拉kernel uboot到 cache目录方便开发 artifact_exists_in_remote_cacheno
查看单独编译kernel命令output里面的log
把sd卡固件烧录到emmc nand-sata-install