|
|
@ -25,6 +25,7 @@ Buildroot被设计为在Linux系统上运行,我们只支持在ubuntu20.04、u |
|
|
|
– unzip |
|
|
|
– rsync |
|
|
|
– file (must be in /usr/bin/file) |
|
|
|
– device-tree-compiler |
|
|
|
– bc |
|
|
|
• Source fetching tools: |
|
|
|
– wget |
|
|
@ -81,7 +82,7 @@ phytium_e2000_debian_desktop_defconfig |
|
|
|
生成的根文件系统、内核、e2000 img 镜像位于output/images目录。 |
|
|
|
|
|
|
|
#### e2000 img 镜像 |
|
|
|
目前buildroot支持编译e2000 img 镜像(disk.img),生成的e2000 img 镜像位于output/images目录。e2000 img 镜像包含了根文件系统、内核、设备树。 |
|
|
|
目前buildroot支持编译e2000 img 镜像(disk.img),生成的e2000 img 镜像位于output/images目录。e2000 img 镜像包含了根文件系统、内核、设备树和GRUB。 |
|
|
|
使用e2000 img 镜像安装系统,不需要像之前那样将存储设备手动分区再拷贝文件,只需要将disk.img文件写入存储设备即可。 |
|
|
|
|
|
|
|
### 更换文件系统的linux内核版本 |
|
|
@ -186,12 +187,6 @@ pyjailhouse安装到/usr/local/lib/python3.8/dist-packages。 |
|
|
|
``` |
|
|
|
关于jailhouse的使用方法等更多信息,请参考`https://gitee.com/phytium_embedded/phytium-jailhouse/blob/master/Readme.md` |
|
|
|
|
|
|
|
## 清理编译结果 |
|
|
|
(1)`$ make clean` |
|
|
|
删除所有编译结果,包括output目录下的所有内容。当编译完一个文件系统后,编译另一个文件系统前,需要执行此命令。 |
|
|
|
(2)`$ make distclean` |
|
|
|
重置buildroot,删除所有编译结果、下载目录以及配置。 |
|
|
|
|
|
|
|
## 为d2000编译文件系统 |
|
|
|
与“为e2000编译文件系统”相比,“为d2000编译文件系统”还需要“准备内核源码”和“编译initrd”。 |
|
|
|
### 准备内核源码 |
|
|
@ -268,19 +263,58 @@ phytiumpi_ubuntu_desktop_defconfig |
|
|
|
生成的根文件系统、内核位于 output/images 目录。 sdcard.img 就是 SD 的镜像文件。 |
|
|
|
后续部署及使用方法,请参考`https://gitee.com/phytium_embedded/phytium-embedded-docs/tree/master/phytiumpi/linux` |
|
|
|
|
|
|
|
# 在开发板上启动文件系统 |
|
|
|
## 在e2000开发板上启动文件系统 |
|
|
|
### 使用U-Boot启动文件系统(手动分区) |
|
|
|
(1)主机端将SATA盘或U盘分成两个分区(以主机识别设备名为/dev/sdb 为例,请按实际识别设备名更改) |
|
|
|
`$ sudo fdisk /dev/sdb` |
|
|
|
## 清理编译结果 |
|
|
|
(1)`$ make clean` |
|
|
|
删除所有编译结果,包括output目录下的所有内容。当编译完一个文件系统后,编译另一个文件系统前,需要执行此命令。 |
|
|
|
(2)`$ make distclean` |
|
|
|
重置buildroot,删除所有编译结果、下载目录以及配置。 |
|
|
|
|
|
|
|
(2)主机端将内核和设备树拷贝到第一个分区,将根文件系统拷贝到第二个分区 |
|
|
|
## 树外构建 |
|
|
|
默认情况下,buildroot生成的所有内容都存储在buildroot源码目录的output目录。然而,buildroot也支持树外构建。树外构建允许使用除output以外的其他输出目录。 |
|
|
|
使用树外构建时,buildroot的.config和临时文件也存储在输出目录中。这意味着使用相同的buildroot源码树,只要使用不同的输出目录,可以并行运行多个构建。 |
|
|
|
使用树外构建进行配置的方式有以下三种: |
|
|
|
(1)在buildroot源码目录运行,使用O变量指定输出目录: |
|
|
|
`$ make O=xxx/foo-output phytium_xxx_defconfig` |
|
|
|
(2)在一个空的输出目录运行,需要指定O变量和buildroot源码树的路径: |
|
|
|
`$ mkdir xxx/foo-output` |
|
|
|
`$ cd xxx/foo-output` |
|
|
|
`$ make -C xxx/phytium-linux-buildroot/ O=$(pwd) phytium_xxx_defconfig` |
|
|
|
(3)对于使用`merge_config.sh`合并配置文件的情况,在buildroot源码目录运行: |
|
|
|
`$ mkdir xxx/foo-output` |
|
|
|
`$ ./support/kconfig/merge_config.sh -O xxx/foo-output configs/phytium_xxx_defconfig configs/phytium_xxx.config` |
|
|
|
|
|
|
|
运行上述命令之一,buildroot会在输出目录中创建一个Makefile,所以在输出目录中再次运行make时,不再需要指定O变量和buildroot源码树的路径。 |
|
|
|
因此配置完成后,编译的命令为: |
|
|
|
`$ cd xxx/foo-output` |
|
|
|
`$ make` |
|
|
|
|
|
|
|
# 在开发板上启动系统 |
|
|
|
## 在e2000开发板上启动系统 |
|
|
|
### 安装系统 |
|
|
|
可以通过手动分区的方式安装系统,将存储设备分区、格式化后,再将buildroot生成的文件拷贝到对应的分区; |
|
|
|
也可以使用e2000 img 镜像安装系统,这种方式不需要手动将存储设备分区再拷贝文件,只需要将disk.img文件写入存储设备即可。 |
|
|
|
#### 手动分区安装系统 |
|
|
|
(1)主机端将存储设备分成两个分区(以主机识别设备名为/dev/sdb 为例,请按实际识别设备名更改) |
|
|
|
`$ sudo fdisk /dev/sdb` |
|
|
|
这将启动fdisk程序,在其中输入命令: |
|
|
|
``` |
|
|
|
输入g创建GPT分区表; |
|
|
|
输入n创建分区,需要创建两个分区; |
|
|
|
输入t将第一个分区的分区类型修改为'EFI System'; |
|
|
|
输入p打印分区表,确保输出中包含'Disklabel type: gpt'及第一个分区的类型为'EFI System'; |
|
|
|
输入w将分区表写入磁盘并退出。 |
|
|
|
``` |
|
|
|
$ sudo mkfs.ext4 /dev/sdb1 |
|
|
|
(2)格式化分区 |
|
|
|
``` |
|
|
|
$ sudo mkfs.vfat /dev/sdb1 |
|
|
|
$ sudo mkfs.ext4 /dev/sdb2 |
|
|
|
``` |
|
|
|
(3)将内核、设备树和GRUB拷贝到第一个分区(EFI分区),将根文件系统拷贝到第二个分区(根分区) |
|
|
|
``` |
|
|
|
$ sudo mount /dev/sdb1 /mnt |
|
|
|
$ sudo cp xxx/phytium-linux-buildroot/output/images/Image /mnt |
|
|
|
$ sudo cp xxx/phytium-linux-buildroot/output/images/e2000q-demo-board.dtb /mnt |
|
|
|
$ sudo cp xxx/phytium-linux-buildroot/output/images/e2000q-demo-board.dtb /mnt(用于U-Boot启动) |
|
|
|
$ sudo cp -r xxx/phytium-linux-buildroot/output/images/efi-part/EFI/ /mnt(用于UEFI启动) |
|
|
|
$ sync |
|
|
|
$ sudo umount /dev/sdb1 |
|
|
|
$ sudo mount /dev/sdb2 /mnt |
|
|
@ -291,30 +325,13 @@ $ sync |
|
|
|
$ cd ~ |
|
|
|
$ sudo umount /dev/sdb2 |
|
|
|
``` |
|
|
|
|
|
|
|
(3)SATA盘或U盘接到开发板,启动开发板电源,串口输出U-Boot命令行,设置U-Boot环境变量,启动文件系统 |
|
|
|
SATA盘: |
|
|
|
``` |
|
|
|
=>setenv bootargs console=ttyAMA1,115200 audit=0 earlycon=pl011,0x2800d000 root=/dev/sda2 rw; |
|
|
|
=>ext4load scsi 0:1 0x90100000 Image; |
|
|
|
=>ext4load scsi 0:1 0x90000000 e2000q-demo-board.dtb; |
|
|
|
=>booti 0x90100000 - 0x90000000 |
|
|
|
``` |
|
|
|
U盘: |
|
|
|
``` |
|
|
|
=>setenv bootargs console=ttyAMA1,115200 audit=0 earlycon=pl011,0x2800d000 root=/dev/sda2 rootdelay=5 rw; |
|
|
|
=>usb start |
|
|
|
=>ext4load usb 0:1 0x90100000 Image; |
|
|
|
=>ext4load usb 0:1 0x90000000 e2000q-demo-board.dtb; |
|
|
|
=>booti 0x90100000 - 0x90000000 |
|
|
|
``` |
|
|
|
|
|
|
|
### 使用U-Boot启动文件系统(使用e2000 img 镜像) |
|
|
|
(1)将e2000 img 镜像(disk.img)写入SATA盘或U盘: |
|
|
|
#### 使用e2000 img 镜像安装系统 |
|
|
|
将e2000 img 镜像(disk.img)写入存储设备: |
|
|
|
`$ sudo dd if=xxx/phytium-linux-buildroot/output/images/disk.img of=/dev/sdb bs=1M` |
|
|
|
`$ sync` |
|
|
|
|
|
|
|
(2)SATA盘或U盘接到开发板,启动开发板电源,串口输出U-Boot命令行,设置U-Boot环境变量,启动文件系统 |
|
|
|
### U-Boot启动系统 |
|
|
|
安装系统后,将存储设备接到开发板,启动开发板电源,串口输出U-Boot命令行,设置U-Boot环境变量来启动系统。 |
|
|
|
SATA盘: |
|
|
|
``` |
|
|
|
=>setenv bootargs console=ttyAMA1,115200 audit=0 earlycon=pl011,0x2800d000 root=/dev/sda2 rw; |
|
|
@ -331,18 +348,40 @@ U盘: |
|
|
|
=>booti 0x90100000 - 0x90000000 |
|
|
|
``` |
|
|
|
|
|
|
|
## 在d2000开发板上启动文件系统 |
|
|
|
### 使用U-Boot启动文件系统 |
|
|
|
(1)主机端将SATA盘或U盘分成两个分区(以主机识别设备名为/dev/sdb 为例,请按实际识别设备名更改) |
|
|
|
### UEFI启动系统 |
|
|
|
如果是使用e2000 img 镜像安装系统,将存储设备接到开发板,启动开发板电源,即可自动启动系统。 |
|
|
|
如果是通过手动分区的方式安装系统,安装系统后,还需要在主机端配置存储设备的EFI分区中的/EFI/BOOT/grub.cfg文件,确保菜单条目中内核命令行参数root的值为根分区(这里是第二个分区)。 |
|
|
|
(1)通过分区UUID |
|
|
|
获取第二个分区的UUID: |
|
|
|
`$ sudo blkid -s PARTUUID -o value /dev/sdb2` |
|
|
|
将grub.cfg中root的值设置为"root=PARTUUID=xxx",xxx为分区UUID的值。 |
|
|
|
(2)通过设备名 |
|
|
|
将grub.cfg中root的值设置为"root=/dev/sda2"。 |
|
|
|
然后将存储设备接到开发板,启动开发板电源,自动启动系统。 |
|
|
|
|
|
|
|
## 在d2000开发板上启动系统 |
|
|
|
### 安装系统 |
|
|
|
(1)主机端将存储设备分成两个分区(以主机识别设备名为/dev/sdb 为例,请按实际识别设备名更改) |
|
|
|
`$ sudo fdisk /dev/sdb` |
|
|
|
|
|
|
|
(2)主机端将内核、设备树和initrd拷贝到第一个分区,将根文件系统拷贝到第二个分区 |
|
|
|
这将启动fdisk程序,在其中输入命令: |
|
|
|
``` |
|
|
|
输入g创建GPT分区表; |
|
|
|
输入n创建分区,需要创建两个分区; |
|
|
|
输入t将第一个分区的分区类型修改为'EFI System'; |
|
|
|
输入p打印分区表,确保输出中包含'Disklabel type: gpt'及第一个分区的类型为'EFI System'; |
|
|
|
输入w将分区表写入磁盘并退出。 |
|
|
|
``` |
|
|
|
$ sudo mkfs.ext4 /dev/sdb1 |
|
|
|
(2)格式化分区 |
|
|
|
``` |
|
|
|
$ sudo mkfs.vfat /dev/sdb1 |
|
|
|
$ sudo mkfs.ext4 /dev/sdb2 |
|
|
|
``` |
|
|
|
(3)主机端将内核、设备树、GRUB和initrd拷贝到第一个分区(EFI分区),将根文件系统拷贝到第二个分区(根分区) |
|
|
|
``` |
|
|
|
$ sudo mount /dev/sdb1 /mnt |
|
|
|
$ sudo cp xxx/phytium-linux-buildroot/output/images/Image /mnt |
|
|
|
$ sudo cp xxx/phytium-linux-buildroot/output/images/d2000-devboard-dsk.dtb /mnt |
|
|
|
$ sudo cp xxx/phytium-linux-buildroot/output/images/d2000-devboard-dsk.dtb /mnt(用于U-Boot启动) |
|
|
|
$ sudo cp -r xxx/phytium-linux-buildroot/output/images/efi-part/EFI/ /mnt(用于UEFI启动) |
|
|
|
$ sudo cp ~/initrd /mnt |
|
|
|
$ sync |
|
|
|
$ sudo umount /dev/sdb1 |
|
|
@ -354,25 +393,34 @@ $ sync |
|
|
|
$ cd ~ |
|
|
|
$ sudo umount /dev/sdb2 |
|
|
|
``` |
|
|
|
|
|
|
|
(3)SATA盘或U盘接到开发板,启动开发板电源,串口输出U-Boot命令行,设置U-Boot环境变量,启动文件系统 |
|
|
|
### U-Boot启动系统 |
|
|
|
安装系统后,将存储设备接到开发板,启动开发板电源,串口输出U-Boot命令行,设置U-Boot环境变量来启动系统。 |
|
|
|
SATA盘: |
|
|
|
``` |
|
|
|
=>setenv bootargs console=ttyAMA1,115200 earlycon=pl011,0x28001000 root=/dev/sda2 rootdelay=5 rw initrd=0x93000000,85M |
|
|
|
=>ext4load scsi 0:1 0x90100000 d2000-devboard-dsk.dtb |
|
|
|
=>ext4load scsi 0:1 0x90200000 Image |
|
|
|
=>ext4load scsi 0:1 0x93000000 initrd |
|
|
|
=>fatload scsi 0:1 0x90100000 d2000-devboard-dsk.dtb |
|
|
|
=>fatload scsi 0:1 0x90200000 Image |
|
|
|
=>fatload scsi 0:1 0x93000000 initrd |
|
|
|
=>booti 0x90200000 - 0x90100000 |
|
|
|
``` |
|
|
|
U盘: |
|
|
|
``` |
|
|
|
=>setenv bootargs console=ttyAMA1,115200 earlycon=pl011,0x28001000 root=/dev/sda2 rootdelay=5 rw initrd=0x93000000,85M |
|
|
|
=>usb start |
|
|
|
=>ext4load usb 0:1 0x90100000 d2000-devboard-dsk.dtb |
|
|
|
=>ext4load usb 0:1 0x90200000 Image |
|
|
|
=>ext4load usb 0:1 0x93000000 initrd |
|
|
|
=>fatload usb 0:1 0x90100000 d2000-devboard-dsk.dtb |
|
|
|
=>fatload usb 0:1 0x90200000 Image |
|
|
|
=>fatload usb 0:1 0x93000000 initrd |
|
|
|
=>booti 0x90200000 - 0x90100000 |
|
|
|
``` |
|
|
|
### UEFI启动系统 |
|
|
|
安装系统后,需要在主机端配置存储设备的EFI分区中的/EFI/BOOT/grub.cfg文件,确保菜单条目中内核命令行参数root的值为根分区(这里是第二个分区)。 |
|
|
|
(1)通过分区UUID |
|
|
|
获取第二个分区的UUID: |
|
|
|
`$ sudo blkid -s PARTUUID -o value /dev/sdb2` |
|
|
|
将grub.cfg中root的值设置为"root=PARTUUID=xxx",xxx为分区UUID的值。 |
|
|
|
(2)通过设备名 |
|
|
|
将grub.cfg中root的值设置为"root=/dev/sda2"。 |
|
|
|
然后将存储设备接到开发板,启动开发板电源,自动启动系统。 |
|
|
|
|
|
|
|
# ubuntu系统安装桌面 |
|
|
|
`phytium_e2000_ubuntu_desktop_defconfig`和`phytium_d2000_ubuntu_desktop_defconfig`默认安装了xfce桌面,配置并编译它就可以获得带 |
|
|
|