zybo开发板linux作业系统移植
2018-01-23 20:55
507 查看
摘要
文章主要介紹zybo board上linux作业系统移植过程。分别介绍了开发环境搭建、U-boot编译、linux内核编译、busybox制作等流程及注意事项。文章使用的开发板是zynq 7000系列的zybo board(开发板照片在文章后面)。Vivado版本是2015.1.主机系统是Debian 9.
首先安装以下软件包:
在我的机器上,如果不安装gcc-multilib的话进行CROSS_COMPILE时会提示找不到相关的编译器,比如说找不到arm-xilinx-linux-gnueabi-gcc.没有安装bc时在编译uImage时会报错。
同时,如果机器上没有装u-boot-tools的话也要记得先安装。
很多教程会说使用source命令去获取xilinx-arm toolchain的路径,但是在我的机器上这是一个坑,因为执行完命令:
进行编译u-boot时报错:arm-xilinx-linux-gnueabi-gcc: Command not found
所以推荐的方法是手动添加路径:
在里面添加:
然后执行
当然,在/etc/proflie里修改也行。
然后进入u-boot-Digilent-Dev目录,编译时使用CROSS_COMPILE选择交叉编译器。
编译完成后,在u-boot-DIgilent-Dev根目录下生成一个u-boot文档,这就是开发板需要用到的可执行文件。由于xilinx只能识别.elf后缀名的可执行文件,所以要把u-boot该名为u-boot.elf
下载完成后进入Linux-Digilent-Dev目录编译。
完成后会生成我们需要的uImage和zybo的设备树文件zynq-zybo.dtb
uImage文件在arch/arm/boot/uImage
我还试了另一种制作uImage的方法,同样也能工作;所以如果第一种方法不行时可以考虑用第二种方法。
zynq-zybo.dtb文件在arch/arm/boot/dts/zynq-zybo.dtb
此外需要将zynq-zybo.dtb重命名为devicetree.dtb
下载BusyBox的源代码:
在这里选择1_28_stable较新的分支,当然,也可以下载其他分支。
接下来进行BusyBox的配置,跟配置linux kernel时差不多。这里使用menuconfig配置
当然,如果使用menuconfig配置出现错误时可能是你的电脑系统没有装libncurses5-dev库,对于Debian系统可以使用下面的命令来安装。
设定完成后开始进行编译
然后使用make install命令把编译出来的BusyBox安装到默认的_install文件夹里。
进入_install文件夹里建立一些缺失的文件夹,文件夹的建立遵循FHS标准。
这看起来和一个完整的linux文件夹很像吧。当然,可以根据具体项目需要建立这些文件夹,这里建立的文件夹只是一个参考。
接下来创建 etc/init.d/rcS 作为系统的启动脚本
然后为rcS添加可执行权限
再建立 etc/inittab 文件
添加/etc/profile文件
设定一个 etc/passwd 文件,这样可以免去输入root的密码
建立 /init 并软链接到 /sbin/init ,避免 Linux Kernel 开机时找不到 rootfs 的 init。
从交叉编译工具链复制一些文件到相应目录下,工具链名叫CodeSourcery,自己下载,假设此工具链文件夾放在我的用戶根目录下。
把编译出来的rootfs打包成cpio格式
之后再通过 mkimage 將 uramdisk.cpio.gz 文件转成 uboot 使用的 uramdisk.image.gz
这个生成的uramdisk.image.gz是我们需要的文件,之后把BOOT.bin,uramdisk.image.gz,devicetree.dtb,uImage复制到sd卡的第一个分区里。
注意:我的zybo开发板设置使用USB1,也有些使用USB0,可以使用命令
按Tab键查看有多少个USB口,然后选择合适的。比如我的机器是ttyUSB1
然后在终端输入:
启动成功后大概是这样的:
[2].维基百科.BusyBox
文章主要介紹zybo board上linux作业系统移植过程。分别介绍了开发环境搭建、U-boot编译、linux内核编译、busybox制作等流程及注意事项。文章使用的开发板是zynq 7000系列的zybo board(开发板照片在文章后面)。Vivado版本是2015.1.主机系统是Debian 9.
1.开发环境搭建
工欲善其事必先利其器,做开发前搭建好编译环境是重要的一步,这些步骤大体上都相同,然而对于不同的系统平台、硬件平台,环境的搭建也会有些差别,因人而异。有些问题只能根据错误提示去需找解决方案。虽然网上大多推荐使用ubuntu LTS作为开发环境,但是我还是倾向使用Debian系统,因为Debian稳定。在Debian 9系统上,要安装一些依赖包,否则无法进行下面的工作,因为在我的机器上我遇到了这些问题,至于其他的机器是什么情况,我就无法得知了。首先安装以下软件包:
apt install gcc-multilib libmpfr-dev bc
在我的机器上,如果不安装gcc-multilib的话进行CROSS_COMPILE时会提示找不到相关的编译器,比如说找不到arm-xilinx-linux-gnueabi-gcc.没有安装bc时在编译uImage时会报错。
/bin/sh: 1: bc: not found
同时,如果机器上没有装u-boot-tools的话也要记得先安装。
apt install u-boot-tools
很多教程会说使用source命令去获取xilinx-arm toolchain的路径,但是在我的机器上这是一个坑,因为执行完命令:
source /opt/Xilinx/Vivado/2015.1/settings64.sh
进行编译u-boot时报错:arm-xilinx-linux-gnueabi-gcc: Command not found
所以推荐的方法是手动添加路径:
nano ~/.profile
在里面添加:
export PATH=$PATH:/opt/Xilinx/SDK/2015.1/gnu/arm/lin/bin export CROSS_COMPILE=arm-xilinx-linux-gnueabi- export ARCH=arm # 建议ARCH变量使用使用时自己指定较好,不用默认为arm。在make时加上ARCH=arm
然后执行
huang@debian ~ $ source ~/.profile
当然,在/etc/proflie里修改也行。
1.U-boot编译
首先下载DigilentInc的 U-boot 版本,地址在这里,注意要选择master-next分支.当然用git命令更方便git clone https://github.com/DigilentInc/u-boot-Digilent-Dev.git -b master-next
然后进入u-boot-Digilent-Dev目录,编译时使用CROSS_COMPILE选择交叉编译器。
CROSS_COMPILE=arm-xilinx-linux-gnueabi- make zynq_zybo_config CROSS_COMPILE=arm-xilinx-linux-gnueabi- make -j2
编译完成后,在u-boot-DIgilent-Dev根目录下生成一个u-boot文档,这就是开发板需要用到的可执行文件。由于xilinx只能识别.elf后缀名的可执行文件,所以要把u-boot该名为u-boot.elf
cp -v u-boot u-boot.elf
2.Linux kernel编译
接下来编译linux kernel.同样在github上下载DigilentInc的linux kernel版本,下载地址在这里同样要选择master-next分支。或者使用git命令更方便git clone https://github.com/DigilentInc/Linux-Digilent-Dev -b master-next
下载完成后进入Linux-Digilent-Dev目录编译。
ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- make xilinx_zynq_def b444 config ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- make -j2 ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- make UIMAGE_LOADADDR=0x8000 uImage ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- make zynq-zybo.dtb
完成后会生成我们需要的uImage和zybo的设备树文件zynq-zybo.dtb
uImage文件在arch/arm/boot/uImage
我还试了另一种制作uImage的方法,同样也能工作;所以如果第一种方法不行时可以考虑用第二种方法。
mkimage -n 'arm-linux' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage uImage #地址可以根据实际情况. #mkimage命令在u-boot-Digilent-Dev/tools/下面执行,如果提示找不到命令可以切换到此目录下面操作。
zynq-zybo.dtb文件在arch/arm/boot/dts/zynq-zybo.dtb
此外需要将zynq-zybo.dtb重命名为devicetree.dtb
cp -v zynq-zybo.dtb devicetree.dtb
3.BusyBox制作
Busybox在单一的可执行文件中提供了精简的Unix工具集,可运行于多款POSIX环境的操作系统,例如Linux,包括Android、Hurd、FreeBSD等等。BusyBox可以被自定义化以提供一个超过两百种功能的子集。它可以提供多数详列在单一UNIX规范里的功能,以及许多用户会想在Linux系统上看到的功能。BusyBox使用ash。在 BusyBox的网站上可以找到所有功能的列表。——摘自维基百科下载BusyBox的源代码:
git clone git://git.busybox.net/busybox -b 1_28_stable
在这里选择1_28_stable较新的分支,当然,也可以下载其他分支。
接下来进行BusyBox的配置,跟配置linux kernel时差不多。这里使用menuconfig配置
ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- make menuconfig
当然,如果使用menuconfig配置出现错误时可能是你的电脑系统没有装libncurses5-dev库,对于Debian系统可以使用下面的命令来安装。
apt-get install libncurses5-dev
设定完成后开始进行编译
ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- make -j2
然后使用make install命令把编译出来的BusyBox安装到默认的_install文件夹里。
ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- make install
进入_install文件夹里建立一些缺失的文件夹,文件夹的建立遵循FHS标准。
cd _install mkdir -p dev proc sys root etc/init.d home mnt opt var lib tmp
这看起来和一个完整的linux文件夹很像吧。当然,可以根据具体项目需要建立这些文件夹,这里建立的文件夹只是一个参考。
接下来创建 etc/init.d/rcS 作为系统的启动脚本
nano etc/init.d/rcS #在里面添加以下内容 #Begin /etc/init.d/rcS #!/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin runlevel=S mount -a mount -t proc proc /proc mount -t sysfs sysfs /sys mount -t tmpfs -o mode=0755 tmpfs /dev // dev目录为tmpfs文件系统目录 mkdir /dev/pts mount -t devpts devpts /dev/pts echo /sbin/mdev > /proc/sys/kernel/hotplug /sbin/mdev -s mkdir /var/log /bin/hostname yourhostname export PATH runlevel #End /etc/init.d/rcS
然后为rcS添加可执行权限
chmod +x etc/init.d/rcS
再建立 etc/inittab 文件
nano etc/inittab #在里面添加以下内容 #Begin /etc/inittab #!/bin/sh #Init script ::sysinit:/etc/init.d/rcS #Start shell on the serial ports ::respawn:/sbin/getty -L ttyPS0 115200 vt100 #What to do when restarting the init process ::restart:/sbin/init #What to do before rebooting ::shutdown:/bin/umount -a -r #End /etc/inittab
添加/etc/profile文件
nano /etc/profile #Begin /etc/profile #Ash profile #vi:syntax=sh #No core files by default #ulimit -S -c 0 > /dev/null 2>&1 USER="`id -un`" LOGNAME=$USER PS1='[\u@\h \W]#' PATH=$PATH HOSTNAME=`/bin/hostname` echo "Processing /etc/profile..." echo "Done" export PATH USER LOGNAME PS1 #End /etc/profile
设定一个 etc/passwd 文件,这样可以免去输入root的密码
nano etc/passwd #在里面添加以下内容 #Begin /etc/passwd root::0:0:root:/root:/bin/sh #End /etc/passwd
建立 /init 并软链接到 /sbin/init ,避免 Linux Kernel 开机时找不到 rootfs 的 init。
ln -s /sbin/init init
从交叉编译工具链复制一些文件到相应目录下,工具链名叫CodeSourcery,自己下载,假设此工具链文件夾放在我的用戶根目录下。
cp -rf ~/CodeSourcery-master/arm-xilinx-linux-gnueabi/libc/lib ./lib cp -rf ~/CodeSourcery-master/arm-xilinx-linux-gnueabi/libc/usr/bin ./usr/bin
把编译出来的rootfs打包成cpio格式
find . | sudo cpio -H newc -o | gzip -9 > ../uramdisk.cpio.gz
之后再通过 mkimage 將 uramdisk.cpio.gz 文件转成 uboot 使用的 uramdisk.image.gz
mkimage -A arm -T ramdisk -C gzip -d ../uramdisk.cpio.gz ../uramdisk.image.gz
这个生成的uramdisk.image.gz是我们需要的文件,之后把BOOT.bin,uramdisk.image.gz,devicetree.dtb,uImage复制到sd卡的第一个分区里。
5.启动系统
最后把复制好文件的SD卡插入开发板卡槽,通电后检查是否正常。开发板上电后如果上面的Done指示灯亮,如下图,证明上面制作的文件是可以启动的:注意:我的zybo开发板设置使用USB1,也有些使用USB0,可以使用命令
ls /dev/ttyUSB
按Tab键查看有多少个USB口,然后选择合适的。比如我的机器是ttyUSB1
然后在终端输入:
sudo minicom -D /dev/ttyUSB1
启动成功后大概是这样的:
6.结语
文章到此已经讲解完本次的linux系统移值过程,包括开发环境搭建,内核编译,uboot编译,BusyBox制作,相信读者自己动手,参考教程走完一遍流程的话会对所学过的知识有更进一步的了解。我认为学以致用是比较好的学习方式。由于这是我第一次接触zynq系列的开发板,所以也有很多不完善的地方,如果有文章有错误或读者有疑问的地方,欢迎留言。也可以邮箱联系我,我会及时更新文章。我的联系方式在下面。7.引用
[1].zybo board 開發記錄: 執行 Linux 作業系統[2].维基百科.BusyBox
相关文章推荐
- 2440开发板linux系统移植3G拨号上网收发短信(三)
- 玩转开发板--Linux系统移植至开发板fl2440实践过程
- 2440开发板linux系统移植3G拨号上网收发短信(一)
- 2440开发板linux系统移植3G拨号上网收发短(二)
- 移植Linux系统到iMX6开发板之LVDS显示屏驱动程序的框架分析与移植
- 移植linux3.7.4系统到itop4412开发板记录
- linux-2.6.32在mini2440开发板上移植(19)之yaffs2文件系统移植
- qt移植到OK6410开发板linux系统过程
- OK6410开发板Linux-3.3.5驱动移植之DM900网卡驱动移植+NFS文件系统挂载
- linux-2.6.32在mini2440开发板上移植(19)之yaffs2文件系统移植
- iMX6开发板移植Linux系统之LVDS显示屏驱动程序分析之LVDS参数的匹配过程分析
- 【嵌入式Linux学习七步曲之第三篇 Linux系统bootlaoder移植】U-BOOT全线移植分析系列之二--U-boot基础
- 嵌入式linux系统中移植SSH
- 基于topeer 4412开发板 无界面linux文件系统的制作
- 基于S3C2440的Linux内核移植和yaffs2文件系统制作-- Linux内核入口
- [嵌入式开发板]iTOP-4412开发板linux 系统存储空间的修改
- 4-OMAPL138开发板Linux SD系统启动卡制作方法
- mini2440开发板Linux系统自动挂载U盘与SD卡失败的解决方法(转)
- 鸟哥的Linux私房菜(基础篇)-第二章、 Linux 如何学习(二.3. 有心朝Linux作业系统学习者的学习态度)
- linux-2.6.32在mini2440开发板上移植----移植Nand驱动并修改分区信息