OrangePi PC Plus 学习笔记

目录

方法1:使用友善之臂的主线uboot+linux+buildroot

1.编译说明

1.下载工具链并安装

2.下载uboot源码

3.编译uboot

4.SD卡分区

5.使用dd命令烧写UBoot

6.下载编译linux内核源码

7.下载buildroot-2022.02.8.tar.gz编译根文件系统Buildroot - Making Embedded Linux Easy

方法2: 用buildroot-2022.02.8.tar.gz构建整个系统Buildroot - Making Embedded Linux Easy

1.下载 buildroot-2022.02.8.tar.gz 解压并进入目录配置编译

2.烧写镜像到sd卡


方法1:使用友善之臂的主线uboot+linux+buildroot

1.编译说明

        Orange Pi PC Plus与NanoPi NEO使用的都是全志H3这颗4核A7芯片所以可以使用友善之臂官网提供的uboot以及他们维护的linux系统。本文编译使用ubuntu16.04.6.

        wiki地址:Building U-boot and Linux for H5/H3/H2+/zh - FriendlyELEC WiKi

        根据wiki说明:

1.下载工具链并安装

链接: https://pan.baidu.com/s/1wEPJx75MICIRptiTW_vV1g?pwd=hkxk 提取码: hkxk
安装方法:
1.解压编译器

mkdir -p /opt/FriendlyARM/toolchain
tar xf arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz -C /opt/FriendlyARM/toolchain/

2.然后将编译器的路径加入到PATH中,用vi编辑vi ~/.bashrc,在末尾加入以下内容:

export PATH=/opt/FriendlyARM/toolchain/4.9.3/bin:$PATH
export GCC_COLORS=auto

3.执行一下~/.bashrc脚本让设置立即在当前shell窗口中生效,注意"."后面有个空格:
. ~/.bashrc

4.测试是否安装成功
输入命令:arm-linux-gcc -v
显示内容包括 gcc version 4.9.3 (ctng-1.21.0-229g-FA)  说明安装成功

2.下载uboot源码

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

3.编译uboot

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

4.SD卡分区

        插入SD卡,在ubuntu系统使用 GParted 进行分区一共分两个区,在第一个区之前保留16M字节也就是MBR+Uboot占16字节。

mbr uboot(无文件系统) fat16文件系统,256M字节放置boot.cr  +  设备树文件 + zImage ext2分区,剩余所有空间放置文件系统

5.使用dd命令烧写UBoot

cd u-boot
dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8
sync && eject /dev/sdX

/dev/sdx请替换为实际的TF卡设备文件名。
sync命令可以确保数据成功写到TF卡中,eject命令用于弹出TF卡。

6.下载编译linux内核源码

git clone https://github.com/friendlyarm/linux.git -b sunxi-4.14.y --depth 1
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-
make modules ARCH=arm CROSS_COMPILE=arm-linux-
make modules_install INSTALL_MOD_PATH=./modules ARCH=arm CROSS_COMPILE=arm-linux-

        编译完成后会在arch/arm/boot/目录下生成zImage,并且在arch/arm/boot/dts/目录下生成dtb文件,把内核 zImage和 对应设备树 拷贝进SD的第一个区也就是fat16分区(也可以把模块拷贝进去)。

cp arch/arm/boot/zImage /media/SD/boot/
cp arch/arm/boot/dts/sun8i-*-nanopi-*.dtb /media/SD/boot/

7.下载buildroot-2022.02.8.tar.gz编译根文件系统Buildroot - Making Embedded Linux Easy

解压buildroot进入目录执行命令:

make orangepi_pc_plus_defconfig

配置根文件系统        

make menuconfig
Toolchain  ---> 
     Toolchain type (Buildroot toolchain)  ---> 
         (X) External toolchain //选择外部工具链
 
Toolchain (Arm ARM 2021.07)  --->
     (X) Custom toolchain //自定义工具链
 
Toolchain origin (Pre-installed toolchain)  --->
    (X) Pre-installed toolchain

 (/opt/FriendlyARM/toolchain/4.9.3) Toolchain path 

External toolchain gcc version (4.9.x)  --->
    (X) 4.9.x

External toolchain kernel headers series (3.10.x)  ---> 
    (X) 3.10.x
    
External toolchain C library (glibc/eglibc)  ---> 
    (X) glibc/eglibc
     
 [*] Toolchain has C++ support? 

Kernel  --->
     [ ] Linux Kernel //取消勾选

 Bootloaders  --->
     [ ] U-Boot  //取消勾选
    

buildroot编译速度很慢需要等比较久,编译完成如图所示:

OrangePi PC Plus 学习笔记_第1张图片

只要根文件系统编译出来即可,镜像生成错误可以忽略 ,查看镜像的输出文件如图:

OrangePi PC Plus 学习笔记_第2张图片

把boot.scr放在sd卡的第一个分区,fat16这个分区。挂载rootfs.ext2这个到ubuntu,拷贝里面的内容到sd卡的第二个分区,也就是ext2格式分区,根文件系统制作完了,现在可以把sd插入到orange-pc-plus 板子上了。会发现一直卡在这个地方 Waiting for root device PARTLABEL=rootfs...
OrangePi PC Plus 学习笔记_第3张图片

        打印数据表示没找到根文件系统,回溯启动打印命令发现sd卡是被挂载在系统上的,但是系统并没有把sd卡的第二个分区设定为启动根文件系统分区,所以必须修改启动命令。启动命令在boot.scr这个文件里面,而boot.scr由boot.cmd生成。生成命令为:

mkimage -C none -A arm -T script -d boot.cmd boot.scr

        这里的boot.scr是由根文件系统里面的 buildroot-2021.11/board/orangepi/orangepi-pc-plus(因为我们编译使用的是orangepi-pc-plus这个配置文件)boot.cmd生成。

boot.cmd里面默认内容:

setenv fdt_high ffffffff

setenv bootargs console=ttyS0,115200 earlyprintk root=PARTLABEL=rootfs rootwait

fatload mmc 0 $kernel_addr_r zImage
fatload mmc 0 $fdt_addr_r sun8i-h3-orangepi-pc-plus.dtb

bootz $kernel_addr_r - $fdt_addr_r

修改bootarg重新指定启动设备以及初始化程序和文件系统类型:

setenv fdt_high ffffffff

setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk2p2 rootwait init=/linuxrc rootfstype=ext4

fatload mmc 0 $kernel_addr_r zImage
fatload mmc 0 $fdt_addr_r sun8i-h3-orangepi-pc-plus.dtb

bootz $kernel_addr_r - $fdt_addr_r

 OrangePi PC Plus 学习笔记_第4张图片

 linux启动完成。

方法2: 用buildroot-2022.02.8.tar.gz构建整个系统Buildroot - Making Embedded Linux Easy

        

1.下载 buildroot-2022.02.8.tar.gz 解压并进入目录配置编译

make orangepi_pc_plus_defconfig
make

在 /buildroot-2022.02.8/board/orangepi/orangepi-pc-plus/readme.txt 文件里有说明。

编译完成如下所示:

OrangePi PC Plus 学习笔记_第5张图片

2.烧写镜像到sd卡

         生成的uboot zimage 设备树 根文件系统roots boot.scr以及可以直接烧写到sd卡的镜像sdcard.img 均在buildroot-2022.02.8/output/images/ 这个文件夹里面:

https://pan.baidu.com/s/17cov-EzUU505lxmUKOY6mA?pwd=sx4a

         可以直接把sdcard.img烧写到sd卡里面,使用windows软件 Win32DiskImager 烧写,或者使用命令行烧写到sd卡(也可以使用上面的方式跟sd卡分区分批写入u-boot-sunxi-with-spl.bin ,复制 boot.scr zImage sun8i-h3-orangepi-pc-plus.dtb到fat16分区,挂载rootfs.ext2,把里面的内容拷贝到sd卡的ext2分区):

dd if=sdcard.img of=/dev/sdx  //sdx是实际的sd卡映射到ubuntu里面的设备文件名需要修改成自己的sd卡设备文件名。

把sd卡插入到orange pc plus即可启动系统,默认用户名是 root(没有设置密码)。

        总结:通过以上内容可以了解linux系统的组成,以及制作这个系统的过程,除了以上方法还可以自行从主线uboot linux下载源码,编译制作启动镜像。

本文uboot linux buildroot相关源码的百度云盘链接:

https://pan.baidu.com/s/17cov-EzUU505lxmUKOY6mA?pwd=sx4a

你可能感兴趣的:(编译工具链,linux)