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

zedboard移植linux内核,zedboard-嵌入式Linux系統移植相关推荐

  1. arm linux 内核配置,嵌入式 Linux开发Kernel移植(二)——kernel内核配置和编译

    嵌入式 Linux开发Kernel移植(二)--kernel内核配置和编译 本文选择linux 2.6.35.7版本kernel进行实践. 一.linux kernel源码目录分析 Kbuild,Ke ...

  2. linux内核单独安装,Linux内核编译与安装

    平台:虚拟机Ubuntu10.04 内核版本:3.0.80 ---------------------------------------------------------------------- ...

  3. 简述arm linux内核启动流程,Linux内核启动过程和Bootloader(总述)

    1.Linux内核启动过程概述 一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(Bootloader),Linux 内核,文件系统,应用程序.其中 Bootloader是系统启 ...

  4. 武汉linux内核好找吗,Linux内核入门

    Linux内核入门 收藏 如何获取Linux内核源代码 下载Linux内核当然要去http://www.kernel.org/了,网站提供了两种文件下载,一种是完整的Linux内核,另一种是内核增量补 ...

  5. linux的头文件下载,Linux内核头文件(linux headers)

    更新 Linux 内核头文件(linux headers) 三 8th, 2013 2,474 views | 发表评论 | Trackback 一般来说,如果不是自己编译 kernel,那么更新头文 ...

  6. linux内核 can总线,Linux Canbus调试笔记

    http://blog.csdn.net/flydream0/article/details/8161418 CAN总线在嵌入式Linux下驱动程序的实现 http://www.21ic.com/ap ...

  7. 手机linux内核版本了解,Linux内核版本介绍与查询

    Linux内核版本命名在不同时期有着不同的规范,在涉及到Linux版本问题时经常容易混淆,主线版本/稳定版/长期支持版本经常搞不清楚,本文主要记录下内核版本命名的规则以及如何查看Linux系统版本信息 ...

  8. 2021-10-16python笔记(Linux内核简介与Linux基础命令)

    前面的博文已经教会了大家如何下载和安装Linux操作系统,并且使用Xshell软件远程连接Linux服务器,这节课我们要进入真正的Linux基础学习中. 知识点概括: 1.Linux的心脏-Linux ...

  9. 【Linux 内核】编译 Linux 内核 ⑤ ( 查看 .config 编译配置文件 | 正式编译内核 )

    文章目录 一.查看 .config 编译配置文件 二.正式编译内核 一.查看 .config 编译配置文件 在上一篇博客 [Linux 内核]编译 Linux 内核 ④ ( 打开 Linux 内核编译 ...

  10. 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的 Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 )

    文章目录 一.下载 Linux 内核 1.下载最新版本 Linux 内核 2.下载指定版本 Linux 内核 二.Linux 内核版本号含义 一.下载 Linux 内核 1.下载最新版本 Linux ...

最新文章

  1. 学习Guava Cache知识汇总
  2. 游戏 Github Page
  3. matlab学习——1.基本操作
  4. 设备文件的创建mknod
  5. left join 后边的on条件 小记
  6. k8s的网络优化(metallb)
  7. mysql金额数字转成中文_数字转换成汉字金额(转)
  8. 如何用堆栈来保存和恢复滚动条位置
  9. 【MySQL】向已有主键的表附加主键属性的自动编号
  10. 常州工学院计算机毕业论文多少字,研究常州工学院毕业论文(设计)系统快速使用指南.doc...
  11. 美团打车已攻到北京,滴滴还在忙着收小蓝单车?
  12. 2016年第3本:启示录----打造用户喜爱的产品
  13. 最详细的《牛津阅读树》(Oxford Reading Tree)攻略,没有之一
  14. 学Java开发需要考什么证书?
  15. mysql现象_Mysql编程中的怪现象
  16. python 修改文件内容3种方法,Python实现修改文件内容的方法分析
  17. 网上看到的!!很值得欣赏~~(没耐…
  18. 短信验证-1基本的服务器环境搭建
  19. 朗逸保险丝安培数及保险丝配置说明
  20. “无为而无不为”杂议

热门文章

  1. VirtualBox简体中文版下载安装使用图解教程
  2. 卡尔曼滤波五个公式各个参数的意义
  3. 【Python】找到含有指定关键词的PDF
  4. display有哪些值?说明他们的作用?
  5. 基于STM32的A2B音频信号发生器开发
  6. sybase基础知识(新手必看)
  7. webservice调用国内飞机航班时刻表 WEB 服务
  8. uniapp封装的激励广告和插屏广告以及banner广告
  9. 复习C语言随笔 十四
  10. 微软认证考试心得:微软认证考试的几种形式