Linux/uClinux移植教程
移植环境:PC主机一台:windows XP+SP3,虚拟机平台Vmware6.5,Linux平台:CentOS5.3操作系统,并且linux虚拟机可以访问互联网。对于其它Linux操作系统,可能需要安装其它一些库文件,移植方法也大致相同。步骤如下:
1).安装EPEL开发包
使用管理员帐号登陆CentOS5.3,下载安装EPEL开发包
[root@localhost ~]#
-Uvh /pub/epel/5/arch.rpm
[root@localhost ~]#
yum install git-all git-gui make gcc ncurs-devel bison byacc flex \
gawk gettext ccache zlib-devel gtk2-devel lzo-devel pax-utilslibglade2-devel
完成后,会在linux机上装上gcc编译器(4.1版本),以及git rver等其它工具。
2).检测cc编译器是否链接到gcc上
[root@localhost ~]# which gcc
[root@localhost ~]# gcc –v
以及
[root@localhost ~]# which cc
[root@localhost ~]# cc -v
如果两者内容相同,则已链接好。
如果不是:
[root@localhost ~]# cd /usr/bin
[root@localhost bin]# ln -s gcc cc
3). 安装nios2-linux-20090730.tar开发包
下载地址: /pub/uclinux/nios2-linux-20090730.tar
可以在windows下下载,下载完后复制到linux的root根目录下。
校验压缩包是否完整:
[root@localhost ~]# sha1sum nios2-linux-20090730.tar
校验结果1d99a54d36759cc6ce5f054ff0460b1bd370b0b6 nios2-linux-20090730.tar
解压到当前目录下,即root目录下:
[root@localhost ~]# tar xf nios2-linux-20090730.tar
进入nios2-linux目录:
[root@localhost ~]# cd nios2-linux
Checkout源代码:
[root@localhost nios2-linux]# ./checkout
等checkout完成后,nios2-linux-20090730.tar安装完成
4).生成nios的交叉编译工具toolschain
如果您对linux比较熟悉,可以自己生成toolschain,这是一个漫长的过程,首先需要安装gcc4.3.3,安装完gcc后,
[root@localhost nios2-linux]# cd toolchain-build # CD 到toolchain-build 目录
[root@localhost toolchain-build]# gcc --version #查看gcc 版本
[root@localhost toolchain-build]# git clean -f -x -d #清除编译缓存
[root@localhost toolchain-build]# make gcc elf2flt gdb-host
幸运地话,会在1到2个小时后完成,不过,这步出错率极高。如果不能成功生成,可以使
用altera 提供的已编译好的交叉编译器:
下载地址: /pub/gnutools/nios2gcc-20080203.tar.bz2
下载完后解压到toolchain-build 目录(注意保持目录结构):
编译工具存放在/root/nios2-linux/toolchain-build/build/nios2/bin 目录下
[root@localhost toolchain-build]# ls
build config gdb.mk Makefile relea_top u-boot.mk
5).设置环境变量
[root@localhost nios2-linux]# gedit ../.bash_profile
在bash_profile 内添加这一句:
PATH=$PATH:/root/nios2-linux/toolchain-build/build/nios2/bin
重新登出登入linux 系统。
检测编译器是否加入命令行路径中:
[root@localhost nios2-linux]# nios2-linux-uclibc-gcc –v //任意目录都可以检测得到版本信息,说明已加入
Reading specs from /root/nios2-linux/toolchain-build/build/nios2/lib/gcc/nios2-linux-uclibc/3.4.6/specs
Configured with: /root/nios2-linux/toolchain-build/../gcc3/configure --prefix=/root/nios2-linux/
toolchain-build/build/nios2 --target =nios2-linux-uclibc --enable-languages =c,c++
--disable-__cxa_atexit --enable-target-optspace --with-gnu-ld --disable-shared --disable-nls
--enable-threads --enable-multilib --enable-cxx-flags=-static
Thread model: posix
gcc version 3.4.6
[root@localhost nios2-linux]#
6).进入uClinux-dist 目录定义内核
[root@localhost uClinux-dist]# make menuconfig
#弹出的配置框中,如果是第一次配置需要配置如下:
Vendor/Product Selection --->
Vendor (Altera) --->
--- Select the Product you wish to target
Altera Products (nios2) --->
Kernel/Library/Defaults Selection --->
--- Kernel is linux-2.6.x
Libc Version (None) ---> #特别注意这里为None
[*] Default all ttings (lo changes)
[ ] Customize Kernel Settings
[ ] Customize Vendor/Ur Settings
[ ] Update Default Vendor Settings
选择<exit> <exit> <yes> 退出
如果是第一次配置,退出后,在前面会有个错误提示,大概意思是没有指定SOPC配置文件system.ptf ,可以不用理会。下一步我们再指定
7).指定ptf文件
我们首先将相对应的QII工程中的PTF文件复制到root目录,然后再指定:
[root@localhost uClinux-dist]# make vendor_hwlect SYSPTF=/root/nios.ptf
选择CPU:cpu以及选择运行存储器为:ddr_sdram
.
.
(3) ssram
Class: no_legacy_module
Size: 1048576 bytes
(4) ddr_sdram
Class: ddr_high_perf
Size: 33554432 bytes
Selection: 4
--- Summary using
PTF: /root/nios.ptf
CPU: cpu
Program memory to execute from: ddr_sdram
-- Settings written to /root/nios2-linux/uClinux-dist/linux-2.6.x/arch/nios2/hardware.mk
make[3]: Leaving directory `/root/nios2-linux/linux-2.6'
make[2]: Leaving directory `/root/nios2-linux/uClinux-dist/vendors/Altera/nios2'
make[1]: Leaving directory `/root/nios2-linux/uClinux-dist/vendors'
[root@localhost uClinux-dist]#
8). 编译内核以及应用程序
[root@localhost uClinux-dist]# make
等一会儿后,keil内核镜像文件zImage生成于
/root/nios2-linux/uClinux-dist/linux-2.6.x/arch/nios2/boot 目录下。
9).下载内核并运行
因为使用的是linux虚拟机,没有在虚拟机中安装QII,所以需要将生成的zImage文件复制到windows下下载。
打开niosII comman shell,
下载sof配置文件:
/> nios2-configure-sof linux_hw.sof
下载镜像文件到SDRAM:
/> nios2-download -g zImage
下载完成后,打开nios终端:
/>nios2-terminal
运行信息如下:
Ok, booting the kernel.
Linux version 2.6.30 (root@localhost.localdomain) (gcc version 3.4.6) #2 PREEMPT Fri Nov 6 20:13:16 CST 2009
uClinux/Nios II
Built 1 zonelists in Zone order, mobility grouping off. Total pages: 8128
Kernel command line:
NR_IRQS:32
PID hash table entries: 128 (order: 7, 512 bytes)
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Memory available: 29996k/2475k RAM, 0k/0k ROM (1667k kernel code, 807k data) Calibrating 49.04 BogoMIPS (lpj=245248)
Mount-cache hash table entries: 512
net_namespace: 264 bytes
NET: Registered protocol family 16
init_BSP(): registering device resources
bio: create slab <bio-0> at 0
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 1024 (order: 1, 8192 bytes)
TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
TCP: Hash tables configured (established 1024 bind 1024)
TCP reno registered
NET: Registered protocol family 1
io scheduler noop registered
io scheduler deadline registered (default)
ttyJ0 at MMIO 0x8002000 (irq = 10) is a Altera JTAG UART
console [ttyJ0] enabled
dm9000 Ethernet Driver, V1.31
TCP cubic registered
NET: Registered protocol family 17
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
Freeing unud kernel memory: 584k freed (0x1d8000 - 0x269000)
Shell invoked to run file: /etc/rc
Command: hostname uClinux
Command: mount -t proc proc /proc -o noexec,nosuid,nodev
Command: mount -t sysfs sysfs /sys -o noexec,nosuid,nodev
Command: mount -t devpts devpts /dev/pts -o noexec,nosuid
Command: mount -t usbfs none /proc/bus/usb
mount: mounting none on /proc/bus/usb failed: No such file or directory
Command: mkdir /var/tmp
Command: mkdir /var/log
Command: mkdir /var/run
Command: mkdir /var/lock
Command: mkdir /var/empty
Command: ifconfig lo 127.0.0.1
Command: route add -net 127.0.0.0 netmask 255.0.0.0 lo
Command: cat /etc/motd
Welcome to
____ _ _
/ __| ||_|
_ _| | | | _ ____ _ _ _ _
| | | | | | || | _ \| | | |\ \/ /
| |_| | |__| || | | | | |_| |/ \
| ___\____|_||_|_| |_|\____|\_/\_/
| |
|_|
For further information check:
/
Execution Finished, Exiting
Sash command shell (version 1.1.1)
/>
这是使用默认配置的运行信息,因为内核默认目标板上使用的网络芯片是DM9000,所以还需要重新
修改内核,并且添加我们需要的其它接口和应用程序。比如LCD,键盘输入,网络服务等接口与服务。
回到linux系统,运行配置菜单:
[root@localhost uClinux-dist]#make menuconfig
Vendor/Product Selection --->
Vendor (Altera) --->
--- Select the Product you wish to target
Altera Products (nios2) --->
Kernel/Library/Defaults Selection --->
--- Kernel is linux-2.6.x
Libc Version (None) ---> #特别注意这里为None
[ ] Default all ttings (lo changes)