Version 149, changed by maddogbattie. 05/16/2008. Show version history
(This is different from the older buildroot guide approach. DO NOT MIX UP)
First, you should (recommended for newbie) install the BinaryToolchain
(Or you can build the cross compiler from sources with BuildrootGuide , but it might be difficult for beginner)
Install required package, as root or via sudo
On Fedora,RHEL,
yum install gcc make ncurses-devel bison flex gawk lynx
On Suse,
zypper install gcc make ncurses-devel bison flex gawk lynx
On Debian/Ubuntu, (via sudo)
apt-get install gcc make ncurses-dev bison flex gawk lynx
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
In the menuconfig we need to change the target to Altera nios2nommu and to change the Libc version to none. This is important as we will be using the uClibc built in the cross gcc with buildroot. We don't want to use the uClibc that comes with the uClinux-dist. Menuconfig changes required are as follows:
Vendor/Product Selection ---> # select
--- Select the Vendor you wish to target
Vendor (Altera) ---> # select and change to Altera
--- Select the Product you wish to target
Altera Products (nios2nommu) ---> # should have defaulted to nios2nommu
Kernel/Library/Defaults Selection ---> # select
(linux-2.6.x) Kernel Version
Libc Version (None) ---> # select and change 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) .
(still in uClinux-dist dir, DO NOT cd linux-2.6.x)
make vendor_hwselect SYSPTF=/path_to_your_hardware_project/your_system.ptf # you must give the path to ptf, no space allowed in path
Compile kernel and apps,
make
If you meet errors, you can use "NON_SMP_BUILD=1 make", which avoids parallel make. The messages will be cleaner.
The compressed kernel is now the images/zImage file of ELF format. You can follow TryOutuClinux to run the new zImage .
Using make vendor_hwselect SYSPTF=~/donwload/system_0.ptf . The zImge, ptf and sof are attached in TryOutuClinux .
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
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 & # 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/nios2nommu/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/nios2nommu/ 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.