Showing results for 
Search instead for 
Did you mean: 
All support for Intel NUC 7 - 13 systems has transitioned to ASUS. Read latest update.



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 Nios2LinuxTarball

tar -C <your_path_here> -xvf nios2-linux-20100621.tar

Note: The releases from uclinux.org 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.

PTF File

You will need to select the hardware using the sopc builder generated PTF file. For the first try, you can use the PTF files attached in the TryOutuClinux page. 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)

The new kernel doesn't use hwselect script, it uses sopc generated header instead.

Run this in your quartus project dir (with quartus 8.1 or later),

sopc-create-header-files --single my_nios2_fpga.h

cp my_nios2_fpga.h linux-2.6.x/arch/nios2/boards/<my_nios>/include/asm


Note: might need to follow the instructions here: NiosII with MMU

Compile kernel and apps,


(this will take a while)

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


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)


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

Command: route add -net netmask lo

Command: cat /etc/motd

Welcome to

____ _ _

/ __| ||_|

_ _| | | | _ ____ _ _ _ _

| | | | | | || | _ \| | | |\ \/ /

| |_| | |__| || | | | | |_| |/

| ___\____|_||_|_| |_|\____|\_/\_/

| |


For further information check:


Execution Finished, Exiting

Sash command shell (version 1.1.1)


Next Steps


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,


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 # staic ip

/> route add default gw # gateway

/> ifconfig

eth0 Link encap:Ethernet HWaddr 00:07:ED:00:00:00

inet addr: Bcast: Mask:


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)


lo Link encap:Local Loopback

inet addr: Mask:


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


/> boa -d & # start httpd with cgi-demo


/> 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


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".

Startup Config

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


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


Git Update

After you have first successful boot, you may use "git pull" to update the kernel and uClinux-dist. Please refer to GitServer.

cd uClinux-dist

git pull

cd ..

cd linux-2.6

git pull

cd ..


Version history
Last update:
‎06-26-2019 02:13 AM
Updated by: