ブートローダをコンパイルします
Ubuntuのオープンシステム端末、U-bootソースディレクトリのu-ブートXLNXを抽出するために、ブートローダのディレクトリを入力します。
$ cd <WORK>/Bootloader
$ tar -jxvf u-boot-xlnx.tar.bz2
仮想マシンが直接ここに抽出し、そのフォルダに
$ cd u-boot-xlnx
コンパイルを開始
$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- distclean
$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- zynq_myd_config
$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-
zynq_myd_configは、コアボードの設定ファイルであります
仮想マシンのビルド時間よりも長く、サブシステムをコンパイルするのに時間がかかります。コンパイル後、カレントディレクトリに「U-ブート」ELFファイルを生成します。あなたは「U-boot.elf」と名前を変更する必要があります次にboot.binこのミラーリングを使用する場合:
cp u-boot ../u-boot.elf
<WORK> / sd_image / boot_buildディレクトリへのu-boot.elfファイル
パッケージのu-ブートxlnx.tar.bz2を削除します。
Linuxカーネルのコンパイル
ディレクトリにカーネル、カーネルソースを展開:
$ cd <WORK>/Kernel
$ tar -jxvf linux-xlnx.tar.bz2
仮想マシンは、直接抽出し、そのフォルダにすることができます
$ cd linux-xlnx
コンパイルを開始します。
$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- distclean
$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- zynq_myd_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- uImage
$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- dtbs
私は約7分間の仮想マシン内のマシンをコンパイルする必要がありますが、非常に長い時間のLinuxコンパイラサブシステムに(最終的に実行するために32ビットのエミュレータと64ビットシステムの原因と推定され、コンパイル与えました)。コンパイル後、Linuxカーネルのイメージファイルは、アーチ/腕/ bootディレクトリにuImageを生成し、アーチ/腕/ブートに/ DTS /ファイルツリーの生成は、デバイスのZynq-myd.dtb、これら2つのファイルは、<WORK>にコピーされます/ sd_imageディレクトリおよびデバイスツリーdevicetree.dtbへのファイルの名前を変更
linux-XLNX Linuxカーネルやデバイスツリーが含まれているドライブのルートディレクトリに、開発プロセスは、変更、追加する必要があります。ドライブを完了した後、アーチ/腕/のconfigs / zynq_myd_defconfigファイルへのドライブ情報を追加してから、再び(distcleanを必要としない)を再び作ります
パッケージのlinux-xlnx.tar.bz2を削除します。
QTルートファイルシステムを構築
Buildrootは、ルートファイルシステムを構築するために使用します。まず、buildrootソースを抽出し、ファイルシステムのファイルシステムのディレクトリを入力します。
$ cd <WORKDIR>/Filesystem
$ tar -jxvf buildroot-2015.02.tar.bz2
$ cd buildroot-2015.02
(隠しファイルを表示する)ディレクトリzynq_myd_config新しい.configファイル内のファイルをコピーします。
$ cp zynq_myd_config .config
設定buildroot:
$ make menuconfig
クロスコンパイラツールパスを設定します。
ツールチェーン--->
() Toolchain path
进入Toolchain path 选项,填入编译器路径:
<WORK>/Toolchain/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux
修改保存后退出配置,开始编译:
$ make
编译耗时非常长,大约1小时 ,等待!编译完成之后将在“buildroot-2015.02/output/images”目录内生产rootfs.tar 文件 ,将rootfs.tar文件移动到<WORK>/sd_image目录
删除包buildroot-2015.02.tar.bz2
修改根文件系统
- 拆解rootfs包(只需要做一次),虚拟机不要直接解压提取(非root)
$ cd <WORK>/sd_image
$ mkdir -p rootfs
$ sudo tar xvf rootfs.tar -C ./rootfs/
- 修改文件夹,加入新文件。添加用户应用程序及各种功能,如vsftpd(参考其他技术文档)
- 打包tar
$ cd ./rootfs
$ sudo tar cvf ../rootfs.tar ./*
在<WORK>/sd_image目录将生成更新的rootfs.tar文件
修改 Ramdisk 文件系统
Ramdisk 主要作为烧写QSPI,eMMC 时使用。
(1) 挂载Ramdisk
新建目录tmp,并将uramdisk.image.gz 拷贝至该目录
$ cd <WORK>/Filesystem
$ mkdir tmp
$ cp uramdisk.image.gz tmp/
$ cd tmp/
去掉mkimage 生成的64 bytes 的文件头,生成新的ramdisk.image.gz
$ dd if=uramdisk.image.gz of=ramdisk.image.gz bs=64 skip=1
gunzip 解压ramdisk.image.gz 生成 ramdisk.image
$ gunzip ramdisk.image.gz
新建挂载目录“ramdiskdir”,并将ramdisk.image 挂载
$ mkdir -p ramdiskdir
$ sudo mount -o loop,rw ramdisk.image ramdiskdir
(2) 进入ramdiskdir目录,根据需要做修改。
移植vsftpd见上一篇
(3) 重新生成ramdisk
同步文件系统并卸载ramdisk
$ sync
$ sudo umount ramdiskdir
用gzip 压缩 ramdisk.image,生成 ramdisk.image.gz
$ gzip -9 ramdisk.image
用mkimage 添加文件头,生成新的 uramdisk.image.gz 供u-boot 使用
$ mkimage -A arm -T ramdisk -C gzip -n Ramdisk -d ramdisk.image.gz uramdisk.image.gz
删除临时文件 ramdisk.image.gz
$ rm ramdisk.image.gz
说明:也可以用unpackfs.sh 脚本来解压。把unpackfs.sh拷贝到uramdksi.image.gz 所在的目录下,执行命令:
$ ./unpackfs.sh uramdisk.image.gz
如提示sh文件没有权限,执行
$ chmod +x unpackfs.sh
该命令会将uramdisk.image.gz 解压并挂载到ramdiskdir 文件夹下。
如果用unpackfs.sh 脚本来解压,可以用packfs.sh脚本来打包。将packfs.sh 拷贝到uramdisk.image.gz 所在的目录下,执行命令打包:
$ ./packfs.sh
(4) 将uramdisk.image.gz文件拷贝到<WORK>/sd_image目录,删除tmp目录
本节结束。