原创 最新nios2架构uclinux的过程

2009-6-6 11:04 9640 8 10 分类: FPGA/CPLD

此文章是本人验证并整理后发布, 转贴的朋友请注明出处:http://blog.ednchina.com/chong_lang/


Here we will setup the source to build Nios2 uClinux. branch "test-nios2" , per 20080619.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


If you already have the toolchain and working uClinux-dist git repo, then you can skip the "new install" below and go to the second half, "Distro upgrade".


New install


You must have a Linux desktop with software development packages. Login as root or use sudo to install these packages.


On Fedora, RHEL, CentOS:


 (for RHEL or CentOS, please add epel repository, How to use EPEL)


sudo rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm


 


sudo yum install git-all make gcc ncurses-devel bison byacc flex \


gawk gettext ccache zlib-devel gtk2-devel lzo-devel


On Suse:


sudo zypper install git-core make gcc ncurses-devel bison byacc \


flex gawk gettext ccache zlib-devel lzo-devel


On Debian/Ubuntu:


sudo apt-get update


sudo apt-get install git-core make gcc ncurses-dev bison flex gawk \


gettext ccache zlib1g-dev libx11-dev texinfo liblzo2-dev


(If Ubuntu/Debian can't find the liblzo2-dev package search for equivalentThis is needed for the MTD tools package.)


Please check your git version with "git --version". If it is older than 1.5.3.x, please update to the latest.


Default GCC compiler version for Ubuntu 9.04 is 4.3.3. To have successful build of toolchain from nios2-linux-20080619.tar - install GCC 4.1 and make appropriate symlinks for gcc and g++.


On Ubuntu, check if the default shell is "bash"


ls -l /bin/sh



This should give "/bin/sh -> bash",
Otherwise, change it with,


sudo rm /bin/sh


sudo ln -s bash /bin/sh


 


followed by a logout and log back in again.


As root, check if you have "cc" which is a symlink to "gcc" ?


which gcc


gcc -v


which cc


cc -v


if not, 


cd /usr/bin


ln -s gcc cc


Make sure you have 5GB or more free disk space. Please use wget to download the tar file nios2-linux-20080619.tar , 842MB. Best thanks to Altera's kindly hosting these files. Please verify the sha1sum after download.
(but don't use Windows ftp, it corrupt the files)


wget ftp://ftp.altera.com/outgoing/nios2-linux-20080619.tar


(SHA1SUM bb851b5494b4ae5c6ccdcfa5625b0f4d9340252a nios2-linux-20080619.tar)
We use "git" to keep the source. You make check out 
GitServer later. The git database inside the tar file was compressed, so we don't do compression on the tar file.


You can build in any working directory as a user account, eg. in your home (say /home/hippo). The tar file contains a nios2-linux dir.


tar xf <path_to>nios2-linux-20080619.tar  # untar the package


cd nios2-linux
ls   # see what's in
binutils  gcc3       README           uClibc        use_http_for_update
checkout  insight    toolchain-build  uClinux-dist
elf2flt   linux-2.6  u-boot           
update


# check out the source


./checkout


Now the source files for the Nios2 uClinux and gnutools are ready. 



  • linux-2.6: the Linux kernel source, which is stock Linux kernel plus Nios2 specific patches. The current version is v2.6.26-rc6.


  • uClinux-dist: the uClinux userspace libraries and applications. We will build uClinux here.


  • binutils, gcc3, elf2flt, insight: the gnu tools.


  • uClibc: the main userspace libraries, which is smaller that glibc. please note, newlib doesn't support Nios2 uClinux.


  • u-boot: a powerful boot loader and monitor, DasUBoot .



We will proceed to build the toolchain. If you don't want or fail to build it yourself, you may use the prebuild 
BinaryToolchain.


此文章是本人验证并整理后发布,转贴的朋友请注明出处:http://blog.ednchina.com/chong_lang/


BinaryToolchain


Table of contents


No headers


  


Attached are binary of the tools to run on Linux PC and root fs from buildroot. You can use it to compile kernel and apps.


Login as a user account on Linux PC, eg, hippo. The user home dir will be /home/hippo, short form as ~/ .


Use wget to download the cross tools (69MB). Best thanks to Altera's kindly hosting these files. (but don't use Windows ftp, it corrupt the files)


wget ftp://ftp.altera.com/outgoing/nios2g...080203.tar.bz2


(sha1sum 6873249d8eae7c2981aac6791f044ddaab507566  nios2gcc-20080203.tar.bz2) 
Open a terminal. Run as root or use sudo,
sudo tar jxf 
nios2gcc-20080203.tar.bz2 -C /


The cross gcc tools was expected to be installed in /opt/nios2 dir. But you may install in any other dirs. Then setup the PATH for the cross gcc, you can add a line at the end of file ~/.bash_profile (or ~/.profile on Debian/Ubuntu) ( the file is hidden, you have to use "ls -a" to find it . For "gedit" use open Location, and enter the file name)


PATH=$PATH:/opt/nios2/bin

After you change the .bash_profile or .profile, you need to logout and login again. So that it will be in the PATH when you login.


Check with,
echo $PATH
It should display like this, with nios2 path at the end,
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/nios2/bin


To verify the cross gcc, try out,
nios2-linux-uclibc-gcc -v

It should display the info,
Reading specs from /opt/nios2/lib/gcc/nios2-linux-uclibc/3.4.6/specs
Configured with: /root/buildroot/toolchain_build_nios2/gcc-3.4.6/configure --prefix=/opt/nios2 --build=i386-pc-linux-gnu --host=i386-pc-linux-gnu --target=nios2-linux-uclibc --enable-languages=c --enable-shared --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld --disable-nls --enable-threads --disable-multilib --enable-cxx-flags=-static
Thread model: posix
gcc version 3.4.6


Then try build kernel and apps as in the uClinuxDist.






UClinuxDist


Table of contents


1.  1. update git to the latest


This page is about building the kernel and apps using uClinux-dist sources. 
If you have any problems, please post over on the Nios forum.


(This is different from the very old buildroot guide approach. DO NOT MIX UP)


Before you begin:


Follow instructions at InstallNios2Linux to download nios2-linux-20080616.tar and check out the source code.


Older version does NOT apply to the procedures described here.


In uClinux-dist dir, perform the menuconfig. DO NOT cd linux-2.6.x


cd uClinux-dist


make menuconfig



In the menuconfig, make sure it is selected as follows:


Vendor/Product Selection --->               # select
    --- Select the Vendor you wish to target


        Vendor (Altera)  --->               # should have default to Altera
    --- Select the Product you wish to target 


        Altera Products (nios2)   --->      # should have defaulted to nios2


 


Kernel/Library/Defaults Selection --->      # select


    --- Kernel is linux-2.6.x


        Libc Version (None)  --->           # should default to None - very important.


    [*] Default all settings (lose changes) # select


    [ ] Customize Kernel Settings 


    [ ] Customize Vendor/User Settings 


    [ ] Update Default Vendor Settings 


Then <exit> <exit> <yes>

DO NOT change any other setting until first successful boot.


Run vendor_hwselect to setup the memory and io port address map of your Nios II board (see LinuxHwselect for details) . Select the nios2 cpu and sdram.
(still in uClinux-dist dir, DO NOT cd linux-2.6.x)


# You must give the absolute path to ptf, no spaces allowed in the path.


make vendor_hwselect SYSPTF="/path"_to_your_hardware_project/your_system.ptf


Compile kernel and apps,


make


(this will take a while)


 


If you have errors, you can get cleaner messages by building in searial instead of in parallel:


 NON_SMP_BUILD=1 make


 


The compressed kernel is stored in the images folder, it is called zImage and is in ELF format. You can follow TryOutuClinux to run the new zImage.


In case you want a real clean restart, use "git clean",


git clean -f -x -d


 





Below is the the start up message of an Altera NEEK dev board.

# nios2-download -g images/zImage
Using cable "USB-Blaster [USB 2-1.2]", device 1, instance 0x00
Pausing target processor: OK
Initializing CPU cache (if present)
OK
Downloaded 1272KB in 7.7s (165.1KB/s)
Verified OK                         
Starting processor at address 0x00500000
# nios2-terminal

nios2-terminal: connected to hardware target using JTAG UART on cable
nios2-terminal: "USB-Blaster [USB 2-1.2]", device 1, instance 0
nios2-terminal: (Use the IDE stop button or Ctrl-C to terminate)

Uncompressing Linux... Ok, booting the kernel.
Linux version 2.6.26-rc6 (hippo@darkstar) (gcc version 3.4.6) #2 PREEMPT Mon Jun 16 14:30:09 CST 2008


uClinux/Nios II
Built 1 zonelists in Zone order, mobility grouping off.  Total pages: 8128
Kernel command line: 
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: 30136k/2333k RAM, 0k/0k ROM (1552k kernel code, 781k data)
Mount-cache hash table entries: 512
net_namespace: 180 bytes
NET: Registered protocol family 16
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 0x8009340 (irq = 8) is a Altera JTAG UART
console [ttyJ0] enabled
ttyS0 at MMIO 0x8008e00 (irq = 7) is a Altera UART
dm9000 Ethernet Driver, V1.30
TCP cubic registered
NET: Registered protocol family 17
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
Freeing unused kernel memory: 572k freed (0x1b8000 - 0x246000)
Shell invoked to run file: /etc/rc
Command: hostname uClinux
Command: mount -t proc proc /proc
Command: mount -t sysfs sysfs /sys
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:
http://www.uclinux.org/

Execution Finished, Exiting

Sash command shell (version 1.1.1)
/> 






Now, you can config uClinux-dist for costmize kernel and select your apps. I enabled only SMC91C111 and DM9000  Ethernet device drivers for Altera dev board in default config, you should enable your EtherNet driver in kernel config otherwise. see LinuxConfig for kernel config items.



Still in uClinux-dist dir, DO NOT cd linux-2.6.x


make menuconfig


Kernel/Library/Defaults Selection --->
(linux-2.6.x) Kernel Version 
(None) Libc Version 
[ ] Default all settings (lose changes) 

  • Customize Kernel Settings    <== to change kernel config
  • Customize Vendor/User Settings  <== to change user apps config
    [ ] Update Default Vendor Settings 

    Then <exit> <exit> <yes> .
    It will enter kernel config first,  then it will enter user apps config, you can select more apps.
    After you change config,


    make





    You may want to now run your own program on the uClinux system.

    An example Hello World program is here: 
    CompileHello

    There are more example programs linked under Then More Fun here: 
    μClinux





    Here is more usage about uClinux,


    /> ifconfig eth0 192.168.1.85  # staic ip
    /> route add default gw 192.168.1.254     # gateway

    /> ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:07:ED:00:00:00  
              inet addr:192.168.1.85  Bcast:192.168.1.255  Mask:255.255.255.0
              UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:8 errors:0 dropped:0 overruns:0 frame:0
              TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:2260 (2.2 KiB)  TX bytes:2854 (2.7 KiB)
              Interrupt:8 

    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

    /> inetd &  # start inetd to invoke telnetd and ftpd services
    [22]
    /> boa
    -d &  # start httpd with cgi-demo
    [23]
    /> netstat -a  # show network services
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State      
    tcp        0      0 *:http                  *:*                     LISTEN      
    tcp        0      0 *:ftp                   *:*                     LISTEN      
    tcp        0      0 *:telnet                *:*                     LISTEN      
    Active UNIX domain sockets (servers and established)
    Proto RefCnt Flags       Type       State         I-Node Path
    /> free
    MemTotal:         6520 kB
    MemFree:          4340 kB
    Buffers:             0 kB
    /> ps
      PID PORT STAT  SIZE SHARED %CPU COMMAND
        1      S     147K     0K  2.8 /init
        2      S       0K     0K  0.0 ksoftirqd/0
        3      S       0K     0K  0.0 events/0
        4      S       0K     0K  0.0 khelper
        5      S       0K     0K  0.0 kthread
        6      S       0K     0K  0.0 kblockd/0
        7      S       0K     0K  0.0 pdflush
        8      S       0K     0K  0.0 pdflush
        9      S       0K     0K  0.0 kswapd0
       10      S       0K     0K  0.0 aio/0
       17      R     147K     0K  0.3 -/bin/sh
       19      S     147K     0K  0.2 dhcpcd
       22      S      95K     0K  0.1 inetd
       23      S     275K     0K  0.4 boa
    />



    ftpd usage, user : ftp, password: <anything> , dir : /home/ftp
    boa and cgi usage, dir : /home/httpd


    You can check what is in busybox, by running "busybox" on uClinux.
    You can check what is in sash, by "help" .


    We use initramfs instead of the default romfs . The initramfs is generated from romfs dir and the dev file in vendors/Altera/nios2/romfs_list . See InitramfsUpdate .


    The simplified "init" program will run etc/rc and etc/inittab during startup. 
    If you want to customize startup, eg inet servers and eth config, you should update the files vendors/Altera/nios2/ rc and inittab.


     


    We arrange to minimize the memory usage. We use sash as default shell, it is smaller than busybox and take less memory. We include some standalone networking servers, such as inetd and telnetd. We build some networking utility into busybox, such as ifconfig,route,netstat,telnet,wget..etc. We don't use sh in busybox, and don't use servers in busybox as it takes a lot of memory.



    You may use the simple history in sash. Use "h" to list history. Use "!<d>" , d="1"..20, to recall one of the history, eg "!3" for the 3rd cmd line.


    Use control-H for backspace.
    /> h
     1: netstat -a
     2: date
     3: ntpdate pool.ntp.org
     4: date
     5: boa &
     6: inetd &
     7: ifconfig
     8: dhcpcd &
     9: free
    10: ps
    /> !10
      PID PORT STAT  SIZE SHARED %CPU COMMAND
        1      S     147K     0K  1.7 /init
        2      S       0K     0K  0.0 ksoftirqd/0
        3      S       0K     0K  0.0 events/0
        4      S       0K     0K  0.0 khelper
        5      S       0K     0K  0.0 kthread
        6      S       0K     0K  0.0 kblockd/0
        7      S       0K     0K  0.0 pdflush
        8      S       0K     0K  0.0 pdflush
        9      S       0K     0K  0.0 kswapd0
       10      S       0K     0K  0.0 aio/0
       11      S       0K     0K  0.0 mtdblockd
       18      R     147K     0K  0.1 /bin/sh
       19      S     147K     0K  0.0 dhcpcd
       22      S      95K     0K  0.0 inetd
       23      S     275K     0K  0.0 boa
    />

  • 文章评论2条评论)

    登录后参与讨论

    用户377235 2013-12-27 21:27

    我也是一样:*** No rule to make target 'menuconfig'. Stop 为什么呢??明明是照着指示去做,还是有问题。。。haiz.... ANYONE can FIX it??

    用户222351 2010-1-23 16:15

    您好,我完全按照您说的做,做在做到 cd uClinux-dist make menuconfig 这步时,总是出现make: *** No rule to make target `menuconfig'. Stop. 然后就没办法继续向下做了,请问这是什么原因?应该怎样解决?谢谢 补充一:在nios-linux文件夹中执行checkout时,出现./checkout: line 6: git: command not found,而且是好几行
    相关推荐阅读
    用户554547 2009-10-29 15:57
    Arm Linux BOOTLOADER全程详解
    网上关于Linux的BOOTLOADER文章不少了,但是大都是vivi,blob等比较庞大的程序,读起来不太方便,编译出的文件也比较大,而且更多的是面向开发用的引导代码,做成产品时还要裁减,这一定程度...
    用户554547 2009-09-18 22:04
    电子方面不错的论坛
     电子工程专辑www.eetchina.com 电子工程专辑一个最大的特色是有非常新的国际资讯,这是其他专业网站没法比的,因为它的合作方CMP曾是美国排行第一的专业媒体,和这样的大佬合作,在内容拥有先...
    用户554547 2009-09-18 22:03
    几个热门的FPGA资料网站
    http://www.fpga4fun.com/<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office"...
    用户554547 2009-09-18 22:00
    Altera官方资料整理(一)
    Altera Education & Events(教育与活动)资料汇总:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-c...
    用户554547 2009-09-18 00:05
    安装 Synplicity公司的 Synplify pro 9.02
    安装 Synplicity公司的 Synplify pro 9.02,先将心得写下面:<?xml:namespace prefix = o ns = "urn:schemas-microsoft...
    用户554547 2009-09-17 23:49
    quartus II 7.2下载安装全过程
    quartus II 7.2 下载安装全过程  分类:可编程逻辑设计—EDA<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:...
    我要评论
    2
    8
    关闭 站长推荐上一条 /2 下一条