终究还是要面对嵌入式系统的移植的!!!本文是陆书在自己电脑上的实现。
关于zedboard的系统开发(这里不考虑zedboard裸奔的情况了)可能会遇到下面的问题:
转载:请注明来之http://blog.csdn.net/xzyiverson
<一>使用提供的Demo系统来进行应用程序和驱动程序的开发
应用程序开发:
需要安装交叉编译环境,另外要用到Opencv或者qt的话,在板子上要移植,这些都在前面的实验上已经做好了。
驱动程序开发:
这里主要是为自定义的ip核(PL)编写linux驱动的问题,包括两个问题,一是在pc下运行该驱动程序,一是在zedboard下运行该驱动程序。
pc机下驱动编写:这个虚拟机已经试过了,不需要搭建其他的环境。
zedboard下驱动编写:如运行在zedboard下的helloworld驱动。参见http://blog.csdn.net/xzyiverson/article/details/12783037
<二>构建自己的嵌入式Linux系统
以下需要的文件都可以在书中的光盘里面找到。
1.搭建系统环境(前面文章已经好了)
http://blog.csdn.net/xzyiverson/article/details/11264417
2编译u-boot
2.1下载和解压u-boot源码
2.2配置u-boot
进入源码目录,make zynq_zed_config
2.3编译u-boot
这里我就郁闷了,书上说要建立软链接,我没有建立也能成功,如果你需要建立的话,那么你就按书上的建立,不过书上写反了:
应该是:ln -s arm-xilinx-linux-gnueabi-gcc arm-linux-gcc
.........
编译:make
编译成功后可以看到生成了u-boot,我们执行mv ./u-boot ./u-boot.elf,这样就成功生成了u-boot。elf文件,这个文件就熟悉了,和前面的.bit和fsbl工程生成的fsbl.elf可以共同生成BOOT.BIN。
3编译内核和设备树
3.1下载解压内核源码
3.2配置内核源码
进入源码目录 make ARCH=arm digilent_zed_defconfig
3.3编译Linux内核
make ARCH=arm
编译成功后,在arch/arm/boot下生成了zImage文件
3.4编译设备树
zedboard的默认设备树源文件digilent-zed.dts(在内核源码目录的arch/arm/boot/dts下)
修改源文件:vim digilent-zed.dts 修改在16行的代码(书上有,不敲上去了)
然后我们进入内核目录下的scripts/dtc路径下的设备树的编译器,使用dtc工具,生成dtb文件。
./dtc -I dts -O dtb -o ./devicetreee.dtb /opt/zedboard/kernel/linux..arch/arm/boot/dts/digilent-zed.dts
说明 ./devicetreee.dtb 生成的文件
/opt/zedboard/kernel/linux..arch/arm/boot/dts/digilent-zed.dts为源文件
4制作根文件系统
4.1编译BusyBox
4.1.1下载和解压源码
4.1.2配置BusyBox(使用默认配置)
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- defconfig
修改安装目录:这里强烈推荐和后面的Dropbear安装到同一个目录下,我第一次没有安装到同一个目录下,有一点麻烦。
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- menuconfig
安装:make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- install
安装完成后,在/opt/zedboard/devel/_rootfs/下可以看到:
4.2编译Dropbear
4.2.1下载和解压源码
4.2.2配置(注意“ CFLAGS”这里一定要有一个空格,血的教训。)
进入源码目录
./configure--prefix=/opt/zedboard/devel/_rootfs--host=arm-xilinx-linux-gnueabi--disable-zlibCC=arm-xilinx-linux-gnueabi-gccLDFLAGS="-Wl,--gc-sections"CFLAGS="-ffunction-sections-fdata-sections-Os"
4.2.3编译
make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"MULTI=1 strip
注意书上少了dropbearconvert
4.2.4安装
make install
4.2.5建立软连接
cd /opt/zedboard/devel/_rootfs/usr/bin/
ln -s ../../sbin/dropbear ./scp
4.3工具链动态库与应用的设置
4.3.1建立目录
cd /opt/zedboard/devel/_rootfs/
mkdir lib
4.3.2拷贝文件
将交叉编译环境库拷贝到这个目录下
cp /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/lib/* lib -r
同样,将工具链拷贝到sbin/和usr/bin/下
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/bin/ -r
4.4目录的创建与配置
首先:创建目录结构:在_rootfs目录下:
mkdir dev etc etc/dropbear etc/init.d mnt opt proc root sys tmp var var/log var/www
然后进入etc目录,创建许多的配置文件
vim fstab
LABEL=//tmpfsdefaults00
none/dev/ptsdevptsgid=5,mode=62000
none/procprocdefaults00
none/syssysfsdefaults00
none/tmptmpfsdefaults00
vim inittab
::sysinit:/etc/init.d/rcS
#/bin/ash
#
#Startanaskfirstshellontheserialports
ttyPS0::respawn:-/bin/ash
#Whattodowhenrestartingtheinitprocess
::restart:/sbin/init
#Whattodobeforerebooting
::shutdown:/bin/umount-a-r
vim passwd
root:$1$qC.CEbjC$SVJyqm.IG.gkElhaeM.FD0:0:0:root:/root:/bin/sh
vim init.d/rcS
#!/bin/sh
echo"StartingrcS..."
echo"++Mountingfilesystem"
mount-tprocnone/proc
mount-tsysfsnone/sys
mount-ttmpfsnone/tmp
echo"++Settingupmdev"
echo/sbin/mdev>/proc/sys/kernel/hotplug
mdev-s
mkdir-p/dev/pts
mkdir-p/dev/i2c
mount-tdevptsdevpts/dev/pts
echo"++Startingtelnetdaemon"
telnetd-l/bin/sh
echo"++Startinghttpdaemon"
httpd-h/var/www
echo"++Startingftpdaemon"
tcpsvd0:21ftpdftpd-w/&
echo"++Startingdropbear(ssh)daemon"
dropbear
echo"rcSComplete"
设置用户权限:chmod 755 etc/init.d/rcS
chown root:root etc/init.d/rcS
4.5制作ramdisk镜像文件
制作镜像文件
cd~
ddif=/dev/zeroof=ramdisk8M.imagebs=1024count=8192
mke2fs-Framdisk8M.image-L"ramdisk"-b1024-m0
tune2fsramdisk8M.image-i0
chmod777ramdisk8M.image
挂载,将_rootfs的所有内容复制到该镜像中
mkdirramdisk
mount-oloopramdisk8M.imageramdisk/
cp-R/home/devel/_rootfs/*ramdisk
umountramdisk/
gzip-9ramdisk8M.image
最后一步;将zImage,BOOT.BIN(暂时用别的先替一下,因为这次我们生成的是elf文件),devicetree.dtb必须改名为devicetree_ramdisk.dtb,ramdisk8M.image.gz拷贝到sd卡中,可以看到启动信息:和之前的系统有一些差别。