SoC学习篇—Linux 系统搭建
- 一、制作.dtb与.rbf文件
- 1、编译硬件工程
- 2、文件制作
- 二、启动操作系统内核
- 1、编译uboot
- 2、生成preloader-mkpimage.bin文件
- 3、生成u-boot.scr文件
- 4、整合文件
- 三、内核编译,生成zImage
- 1、切换4.9版本
- 2、指定交叉编译工具链路径
- 3、修改内核为出厂设置
- 4、修改自己的内核配置
- 5、编译内核
- 6、查看生成文件
- 四、编译根文件系统
- 1、切换版本到【2015.08】
- 2、清空编译信息
- 3、配置buildroot
- 4、文件复制
- 5、编译根文件系统
- 五、制作SD卡镜像
- 1、文件整合
- 2、制作512M的虚空镜像
- 1、磁盘分区
- 2、分区格式化
- 3、写入文件到镜像
一、制作.dtb与.rbf文件
1、编译硬件工程
打开黄金参考工程

全编译硬件工程

等待编译完成;编译结果

2、文件制作
打开【SoC EDS command shell】,进入工程所在目录

制作二进制格式的设备树文件【.dtb】
make dtb

查看生成的设备树文件【复制到桌面】

制作【.rbf文件,复制到桌面】

至此,文件制作完成。
二、启动操作系统内核
1、编译uboot
删除工程目录下【software】中的两个文件夹【没有就跳过此操作】

进入【software】目录,配置环境变量
export PATH=/bin:$PATH

生成板机支持包【software目录下】
bsp-editor.exe

选择如示

打开后界面如示,点击OK

点击生成bps

查看生成文件

点击Exit,回到指令栏
编译uboot【回到黄金工程目录下】【编译需要约30min】

出现类似错误,一直【make uboot】即可

编译结果【此界面为成功编译】

可以看到生成文件

将文件【u-boot-sol.bin】文件复制到【preloader】目录下

2、生成preloader-mkpimage.bin文件
在【preloader】目录下运行指令
mkpimage -hv 0 -o preloader.img u-boot-spl.bin

生成文件

生成对应【.bin】文件
make

生成文件

3、生成u-boot.scr文件
在【software】目录下创建【boot.script】文件
echo --Programming FPGA --
fatload mmc 0:1 $fpgadata soc_system.rbf;
fpga load 0 $fpgadata $filesize;
run bridge_enable_handoff;
echo --Setting Env Variables --
setenv fdtimage soc_system.dtb;
setenv mmcroot /dev/mmcblk0p2;
setenv mmcload 'mmc rescan;${mmcloadcmd} mmc 0:${mmcloadpart} ${loadaddr} ${bootimage};${mmcloadcmd} mmc 0:${mmcloadpart} ${fdtaddr} ${fdtimage};';
setenv mmcboot 'setenv bootargs console=ttyS0,115200 root=${mmcroot} rw rootwait; bootz ${loadaddr} - ${fdtaddr}';
run mmcload;
run mmcboot;
文件如示

使用指令,生成文件
mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Boot Script Name" -d boot.script u-boot.scr

查看生成文件

4、整合文件
将上述文件整合到一个文件夹(方便找到)
文件路径
C5CB_GHRDsoftwarepreloaderuboot-socfpga
C5CB_GHRDsoftware
C5CB_GHRDsoftwarepreloader

至此uboot文件制作完成。
三、内核编译,生成zImage
此版块为Ubuntu操作
1、切换4.9版本
进入内核目录
cd linux-socfpga
方式一:

方式二:

列出所有分支版本
git tag -l

版本切换
git checkout rel_socfpga-4.9.78-ltsi_18.02.01_pr

如示则正常

2、指定交叉编译工具链路径
指令如下
export CROSS_COMPILE=/home/z/WORK/inside_core/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/bin/arm-linux-gnueabihf-

3、修改内核为出厂设置
指令如下
make ARCH=arm socfpga_defconfig

4、修改自己的内核配置
指令如下
make ARCH=arm menuconfig

遇到错误

解决方法【终端最大化】,成功进入配置界面

修改配置操作说明:
y:选中;n:取消选中;
回车进入选项
选择支持大存储空间设备选项

选中最大存储空间

5、编译内核
指令
make ARCH=arm LOCALVERSION=zImage

编译完成

6、查看生成文件
指令
ls arch/arm/boot/

至此内核编译完成。
四、编译根文件系统
解压文件
解压buildboot;交叉编译工具链

1、切换版本到【2015.08】
该版本支持linaro的4.9-2014.09的交叉编译器
cd buildroot/
git checkout 2015.08

2、清空编译信息
make clean

3、配置buildroot
cd ..//退回上级目录
make -C buildroot ARCH=arm BR2_TOOLCHAIN_EXTERNAL_PATH=/home/z/WORK/inside_core/gcc-linux-gnueabihf-4.9-2014.09_linux menuconfig
①配置Target Options:
按图示操作即可
配置一:


配置二:


配置三:


配置四:



②配置Toolchain:
配置一:


配置二:

配置三:

其他选项保持默认。
③配置System Configuration
设置主机用户名和密码


④配置Kernel

⑤配置Target packages


⑥配置ssh



⑦配置busybox【保存退出】
make -C buildroot busybox-menuconfig

进入如示界面


4、文件复制
注意看方框文件路径【原本样式】

复制后

再次配置,回到【inside_core】目录下
make -C buildroot busybox-menuconfig
配置完成

5、编译根文件系统
下载文件
make -C buildroot BR2_TOOLCHAIN_EXTERNAL_PATH=/home/z/WORK/inside_core/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux all

查看生成文件
ls buildroot/output/images/

五、制作SD卡镜像
1、文件整合
将内核、文件系统以及uboot和硬件配置放到镜像里面
硬件文件:黄金工程【soc_system.dtb/rbf】
uboot:【/software/u-boot.scr;software/spl-bsp/preloader-mkpimage.bin;software/u-boot-socfpga/u-boot-img】
内核:linux-socfpga/arch/arm/boot/zImage
文件系统:【buildroot/output/images/rootfs.tar】
整合在一起,拖到Ubuntu里面去

一个完整的soc板上系统分为3个区,分区以及保存文件如下:

2、制作512M的虚空镜像
1、磁盘分区
在文件夹里面打开终端【鼠标右键,终端打开】
sudo dd if=/dev/zero of=sdcard.img bs=512M count=1

获取loop device设备名
sudo losetup --show -f sdcard.img

对sdcard.img进行分区
sudo fdisk /dev/loop0

在sdcard.img创建分区,用于存储preloader.img,配置信息如下:

转换分区类型为“a2”

创建分区2,存储Linux root文件,配置信息如下:

创建分区1,存储启动文件,配置信息如下:

转换分区1类型为FAT

输入指令p;查看sdcard.img分区信息

输入w;退出分区操作【无视警告信息】

输入指令让分区生效
sudo partprobe /dev/loop0

查看镜像分区

分区信息

2、分区格式化
格式化分区1位FAT文件系统
sudo mkfs -t vfat /dev/loop0p1

格式化分区2为ext4文件系统
sudo mkfs.ext4 /dev/loop0p2

3、写入文件到镜像
将【preloader-mkpimage.bin】和【u-boot.img】写入分区3:
sudo dd if=preloader-mkpimage.bin of=/dev/loop0p3 bs=64k seek=0

sudo dd if=u-boot.img of=/dev/loop0p3 bs=64k seek=4

查看分区

写入分区2文件系统

解压文件系统到分区2

sudo tar -xf/home/z/mine/rootfs.tar -C ./

写入分区1文件

复制文件到镜像


生成文件

至此,镜像制作完成。
将此镜像用Windows烧录,可以测试登录成功。有关烧录具体验证,可参考:
SoC学习篇—实现hello FPGA打印
最后
以上就是典雅饼干最近收集整理的关于SoC学习篇—Linux 系统搭建一、制作.dtb与.rbf文件二、启动操作系统内核三、内核编译,生成zImage四、编译根文件系统五、制作SD卡镜像的全部内容,更多相关SoC学习篇—Linux内容请搜索靠谱客的其他文章。
发表评论 取消回复