zedboard移植linux内核,zedboard-嵌入式Linux系統移植

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_COMPILE=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上電觀察啟動信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值