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上電觀察啟動信息。
zedboard移植linux内核,zedboard-嵌入式Linux系統移植相关推荐
- arm linux 内核配置,嵌入式 Linux开发Kernel移植(二)——kernel内核配置和编译
嵌入式 Linux开发Kernel移植(二)--kernel内核配置和编译 本文选择linux 2.6.35.7版本kernel进行实践. 一.linux kernel源码目录分析 Kbuild,Ke ...
- linux内核单独安装,Linux内核编译与安装
平台:虚拟机Ubuntu10.04 内核版本:3.0.80 ---------------------------------------------------------------------- ...
- 简述arm linux内核启动流程,Linux内核启动过程和Bootloader(总述)
1.Linux内核启动过程概述 一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(Bootloader),Linux 内核,文件系统,应用程序.其中 Bootloader是系统启 ...
- 武汉linux内核好找吗,Linux内核入门
Linux内核入门 收藏 如何获取Linux内核源代码 下载Linux内核当然要去http://www.kernel.org/了,网站提供了两种文件下载,一种是完整的Linux内核,另一种是内核增量补 ...
- linux的头文件下载,Linux内核头文件(linux headers)
更新 Linux 内核头文件(linux headers) 三 8th, 2013 2,474 views | 发表评论 | Trackback 一般来说,如果不是自己编译 kernel,那么更新头文 ...
- linux内核 can总线,Linux Canbus调试笔记
http://blog.csdn.net/flydream0/article/details/8161418 CAN总线在嵌入式Linux下驱动程序的实现 http://www.21ic.com/ap ...
- 手机linux内核版本了解,Linux内核版本介绍与查询
Linux内核版本命名在不同时期有着不同的规范,在涉及到Linux版本问题时经常容易混淆,主线版本/稳定版/长期支持版本经常搞不清楚,本文主要记录下内核版本命名的规则以及如何查看Linux系统版本信息 ...
- 2021-10-16python笔记(Linux内核简介与Linux基础命令)
前面的博文已经教会了大家如何下载和安装Linux操作系统,并且使用Xshell软件远程连接Linux服务器,这节课我们要进入真正的Linux基础学习中. 知识点概括: 1.Linux的心脏-Linux ...
- 【Linux 内核】编译 Linux 内核 ⑤ ( 查看 .config 编译配置文件 | 正式编译内核 )
文章目录 一.查看 .config 编译配置文件 二.正式编译内核 一.查看 .config 编译配置文件 在上一篇博客 [Linux 内核]编译 Linux 内核 ④ ( 打开 Linux 内核编译 ...
- 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的 Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 )
文章目录 一.下载 Linux 内核 1.下载最新版本 Linux 内核 2.下载指定版本 Linux 内核 二.Linux 内核版本号含义 一.下载 Linux 内核 1.下载最新版本 Linux ...
最新文章
- 学习Guava Cache知识汇总
- 游戏 Github Page
- matlab学习——1.基本操作
- 设备文件的创建mknod
- left join 后边的on条件 小记
- k8s的网络优化(metallb)
- mysql金额数字转成中文_数字转换成汉字金额(转)
- 如何用堆栈来保存和恢复滚动条位置
- 【MySQL】向已有主键的表附加主键属性的自动编号
- 常州工学院计算机毕业论文多少字,研究常州工学院毕业论文(设计)系统快速使用指南.doc...
- 美团打车已攻到北京,滴滴还在忙着收小蓝单车?
- 2016年第3本:启示录----打造用户喜爱的产品
- 最详细的《牛津阅读树》(Oxford Reading Tree)攻略,没有之一
- 学Java开发需要考什么证书?
- mysql现象_Mysql编程中的怪现象
- python 修改文件内容3种方法,Python实现修改文件内容的方法分析
- 网上看到的!!很值得欣赏~~(没耐…
- 短信验证-1基本的服务器环境搭建
- 朗逸保险丝安培数及保险丝配置说明
- “无为而无不为”杂议