您的位置:首页 > 运维架构 > Linux

zedboard-嵌入式Linux系统移植

2017-07-25 15:34 405 查看
1.在构建好嵌入式开发环境的基础上进行下一步开发移植工作。

2.编译U-Boot

首先在线获取U-Boot源码,在源码include/configs/zynq_zed.h中,修改IP地址(CONFIG_IPADDR)、网关地址(CONFIG_SERVERIP)、MAC地址(CONFIG_EXTRA_ENV_SETTINGS-ethaddr)等宏定义参数,避免设备间通信冲突。

修改完成后,使用交叉编译工具编译U-Boot文件,编译完成后,在生成的u-boot文件后加.elf后缀以便Xilinx SDK工具对其进行识别,该文件和 .bit文件, fsbl.elf文件被用来生成Linux启动文件BOOT.BIN。

下载
# git clone https://github.com/Digilent/u-boot-digilent 修改U-Boot
# vim u-boot-digilent/include/configs/zynq_zed.h
# make zynq_zed_config
编译
# make
# cp u-boot u-boot.elf


3.生成BOOT.BIN

在XPS中选择将硬件设计输出到Xilinx软件设计平台(SDK),建立第一阶段引导程序(First Stage Bootloader,FSBL)工程,该工程使用逻辑配置文件system.bit对PL进行配置并载入操作系统镜像,通过Xilinx工具使用上两步u-boot.elf、system.bit以及FSBL.elf生成Zynq的BOOT镜像,将生成文件u-boot.bin改名为BOOT.BIN以识别。(可后续再做,先专心Ubuntu环境下文件的生成)

4.编译Linux内核

下载Linux内核源码,这里使用linux-digilent-master。解压后进入源码目录,

make ARCH=arm digilent_zed_defconfig

进行初步配置工作。

//使用menuconfig工具对内核进行配置。(按需求)

进行编译工作,

make ARCH=arm

编译成功后,在arch/arm/boot下生成了zImage文件。

5.编译设备文件树

设备文件树源码位于arch/arm/boot/dts/digilent-zed.dts,修改设备串口连接时的波特率信息,

vi digilent-zed.dts,在chosen项进行修改。

通过如下指令编译修改好的设备文件树源码(devicetree.dts),可执行程序dtc为设备树编译器,(devicetree.dtb)是由源码生成的二进制文件。

./linux-digilent/scripts/dtc/dtc -I dts -O dtb –o devicetree.dtb digilent-zed.dts

6.制作根文件系统(参考http://blog.csdn.net/xzyiverson/article/details/12704737

Linux启动文件包括BOOT.BIN、zImage、devicetree.dtb以及文件系统ramdisk镜像文件,前几项已经完成制备,现在进行最后一项ramdisk制备。

6.1编译BusyBox

下载busybox-1.19.3.tar,解压进入文件目录后,

make ARCH=arm CROSS_COMPIL
4000
E=arm-xilinx-linux-gnueabi- defconfig

进行初步配置工作,然后输入如下指令:

make (ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-) menuconfig

在BusyBox Settings中,Installation…中选择第二项,输入想要存放文件目录的地址,

/opt/zed/_roofs

输入make install 安装。

这里出现问题如下:

/usr/include/mtd/ubi-user.h:412:3: error: conflicting types for ‘__packed’
/usr/include/mtd/ubi-user.h:313:3: note: previous declaration of ‘__packed’ was here
make[1]: *** [miscutils/ubi_tools.o] Error 1
make: *** [miscutils] Error 2


需要重新配置 make menuconfig

Miscellaneous Utilities —>删掉所有和ubi相关选项

linux-2.6.27后,内核加入了一种新型的Flash文件系统UBI(Unsorted Block Images)。

删掉后,成功安装。(参考http://blog.sciencenet.cn/blog-623402-483960.html

6.2编译Dropbear

下载dropbear-2012.55.tar,解压并进入源码目录,进行配置。

./configure –prefix=/opt/zedboard/devel/_rootfs –host=arm-xilinx-linux-gnueabi –disable-zlib CC=arm-xilinx-linux-gnueabi-gcc LDFLAGS=”-Wl,–gc-sections” CFLAGS=”-ffunction-sections -fdata-sections -Os”

编译安装:

make PROGRAMS=”dropbear dbclient dropbearkey dropbearconvert scp”MULTI=1 strip

make install

建立软连接

cd /opt/zed/_rootfs/usr/bin/

ln -s ../../sbin/dropbear ./scp

工具链动态库与应用设置

1.建立目录

cd /opt/zedboard/devel/_rootfs/

mkdir lib

将交叉编译环境库拷贝到这个目录下

cp /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/lib/* lib -r
cp /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/sbin/* sbin/ -r
cp /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/usr/bin/* usr/


2.创建目录结构与配置

在/opt/zedboard/devel/_rootfs/下:

mkdir dev etc etc/dropbear etc/init.d mnt opt proc root sys tmp var var/log var/www

然后进入etc目录,创建许多的配置文件

vi fstab

LABEL=/ / tmpfs defaults 0 0

none /dev/pts devpts gid=5,mode=620 0 0

none /proc proc defaults 0 0

none /sys sysfs defaults 0 0

none /tmp tmpfs defaults 0 0

vi inittab

::sysinit:/etc/init.d/rcS
# /bin/ash
#
# Start an askfirst shell on the serial ports
ttyPS0::respawn:-/bin/ash
# What to do when restarting the init process
::restart:/sbin/init
# What to do before rebooting
::shutdown:/bin/umount -a -r


vi passwd

root:1qC.CEbjC$SVJyqm.IG.gkElhaeM.FD0:0:0:root:/root:/bin/sh

vi init.d/rcS

#!/bin/sh

echo "Starting rcS..."

echo "++ Mounting filesystem"
mount -t proc none /proc
mount -t sysfs none /sys
mount -t tmpfs none /tmp

echo "++ Setting up mdev"

echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

mkdir -p /dev/pts
mkdir -p /dev/i2c
mount -t devpts devpts /dev/pts

echo "++ Starting telnet daemon"
telnetd -l /bin/sh

echo "++ Starting http daemon"
httpd -h /var/www

echo "++ Starting ftp daemon"
tcpsvd 0:21 ftpd ftpd -w /&

echo "++ Starting dropbear (ssh) daemon"
dropbear
echo "rcS Complete"


设置用户权限:chmod 755 etc/init.d/rcS

chown root:root etc/init.d/rcS

3.制作ramdisk镜像文件

制作镜像文件

cd ~
dd if=/dev/zero of=ramdisk8M.image bs=1024 count=8192
mke2fs -F ramdisk8M.image -L "ramdisk" -b 1024 -m 0
tune2fs ramdisk8M.image -i 0
chmod 777 ramdisk8M.image


挂载,将_rootfs的所有内容复制到该镜像中

mkdir ramdisk
mount -o loop ramdisk8M.image ramdisk/
cp -R /home/devel/_rootfs/* ramdisk
umount ramdisk/
gzip -9 ramdisk8M.image


最后一步;将zImage,BOOT.BIN,devicetree_ramdisk.dtb(devicetree.dtb改名),ramdisk8M.image.gz拷贝到sd卡中,zedboard上电观察启动信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: