Home hello-4 auf COBRA unter Kernel 2.4 Die Lösung ist das Including von "Rules.make" Versuch "mknod" von Hand
 

2.3.3 Das "hello-4.o" läßt sich auch auf dem COBRA-Board erfolgreich starten

(29.06.2005)

Das "hello-4.o" ließ sich erfolgreich starten, wie der Output zeigt:

dn image.bin
Address:  0x00010000
Ethernet Address is 00:CF:52:82:CF:01
Downloading Image 'image.bin' from 192.168.100.1
TFTP download successful
Read 1625680 bytes (3176 blocks)
dBUG> go 10000
Linux version 2.4.24-uc0 (andreas@gericom) (gcc version 2.95.3 20010315 (release)(ColdFire patches - 205

uClinux/COLDFIRE(m5282)
COLDFIRE port done by Greg Ungerer, gerg@snapgear.com
Flat model support (C) 1998,1999 Kenneth Albanowski, D. Jeff Dionne
On node 0 totalpages: 2048
zone(0): 0 pages.
zone(1): 2048 pages.
zone(2): 0 pages.
Kernel command line:
Calibrating delay loop... 6.96 BogoMIPS
Memory available: 6360k/8192k RAM, 0k/0k ROM (712k kernel code, 203k data)
kmem_create: Forcing size word alignment - vm_area_struct
kmem_create: Forcing size word alignment - mm_struct
kmem_create: Forcing size word alignment - filp
Dentry cache hash table entries: 1024 (order: 1, 8192 bytes)
Inode cache hash table entries: 512 (order: 0, 4096 bytes)
Mount cache hash table entries: 512 (order: 0, 4096 bytes)
kmem_create: Forcing size word alignment - bdev_cache
kmem_create: Forcing size word alignment - cdev_cache
kmem_create: Forcing size word alignment - kiobuf
Buffer cache hash table entries: 1024 (order: 0, 4096 bytes)
Page-cache hash table entries: 2048 (order: 1, 8192 bytes)
POSIX conformance testing by UNIFIX
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
kmem_create: Forcing size word alignment - sock
Initializing RT netlink socket
Starting kswapd
kmem_create: Forcing size word alignment - file_lock_cache
kmem_create: Forcing size word alignment - nfs_read_data
kmem_create: Forcing size word alignment - nfs_write_data
ColdFire internal UART serial driver version 1.00
ttyS0 at 0x40000200 (irq = 77) is a builtin ColdFire UART
ttyS1 at 0x40000240 (irq = 78) is a builtin ColdFire UART
kmem_create: Forcing size word alignment - blkdev_requests
fec.c: Probe number 0 with 0x0000
eth0: FEC ENET Version 0.2, 00:cf:52:82:cf:01
fec: PHY @ 0x1f, ID 0x20005c30 -- DP83847
Blkmem copyright 1998,1999 D. Jeff Dionne
Blkmem copyright 1998 Kenneth Albanowski
Blkmem 7 disk images:
0: F5208-1AFA07 [VIRTUAL F5208-1AFA07] (RO)
1: FFC00000-FFC3FFFF [VIRTUAL FFC00000-FFC3FFFF] (RW)
2: FFC00000-FFC07FFF [VIRTUAL FFC00000-FFC07FFF] (RW)
3: FFC08000-FFC3FFFF [VIRTUAL FFC08000-FFC3FFFF] (RW)
4: FFC40000-FFFFFFFF [VIRTUAL FFC40000-FFFFFFFF] (RW)
5: FFD00000-FFDFFFFF [VIRTUAL FFD00000-FFDFFFFF] (RW)
6: FFC00000-FFFFFFFF [VIRTUAL FFC00000-FFFFFFFF] (RW)
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP
kmem_create: Forcing size word alignment - ip_dst_cache
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 512 bind 512)
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
VFS: Mounted root (romfs filesystem) readonly.
Freeing unused kernel memory: 24k freed (0xdc000 - 0xe1000)
Shell invoked to run file: /etc/rc
Command: hostname cobra1
Command: /bin/expand /etc/ramfs.img /dev/ram0
Command: mount -t proc proc /proc
Command: mount -t ext2 /dev/ram0 /var
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.255.255.0 lo
Command: # set up the ip address of the target:
Command: ifconfig eth0 192.168.100.2 broadcast 192.e16t8.h1000.:25 5 cneotmnasfk i25g5.:25 5.a25u5.t0 o-
negotiation on, 100FDX, 100HDX, 10FDX, 10HDX.
Command: # add a route via eth0:
Command: route add -net 192.168.100.0 netmask 255.255.255.0 eth0
Command: # start the portmapper (needed for nfs):
Command: portmap &
[15]
Command: # the following line is an example, how to mount nfs directories:
Command: #mount -t nfs -o rsize=4096,wsize=4096 192.168.100.1:/home/uClinux /usr
Command: cat /etc/motd
===============================================
               COBRA5282 board
               Version 20040324
===============================================
Command:
Execution Finished, Exiting

Sash command shell (version 1.1.1)
/> mount -t nfs -o rsize=4096,wsize=4096 192.168.100.1:/home/andreas/uClinux /usr
/> ls
bin             dev             etc             home            lib             mnt             proc   r
/> ls -l
drwxr-xr-x    1 0        0              32 Jan  1  1970 bin
drwxr-xr-x    1 0        0              32 Jan  1  1970 dev
drwxr-xr-x    1 0        0              32 Jan  1  1970 etc
drwxr-xr-x    1 0        0              32 Jan  1  1970 home
drwxr-xr-x    1 0        0              32 Jan  1  1970 lib
drwxr-xr-x    1 0        0              32 Jan  1  1970 mnt
dr-xr-xr-x    2 0        0               0 Nov 30 00:00 proc
lrwxrwxrwx    1 0        0               8 Jan  1  1970 tmp -> /var/tmp
drwxr-xr-x    3 1000     100           216 Jun 29  2005 usr
drwxr-xr-x    7 0        0            1024 Nov 30 00:00 var
/> cd usr
/usr> ls -l
-rw-r--r--    1 1000     100          4337 Mar  4  2005 boot_linux.cap
-rw-r--r--    1 1000     100        135796 Jun 29  2005 hello-4.o
drwxr-xr-x    2 1000     100           432 Mar  4  2005 led_test_cobra5282-20040324
-r-xr-xr-x    1 1000     100          3028 Mar  4  2005 led_test_cobra5282-20040324.tar.gz
/usr> lsmod
Module                  Size  Used by    Not tainted
/usr> insmod hello-4.o
Using hello-4.o
Hello, world 4
Device registered using major 254.
/usr> lsmod
Module                  Size  Used by    Not tainted
hello-4                  516   0 (unused)
/usr> rmmod hell
rmmod: hell: No such file or directory
pid 28: failed 256
/usr> rmmod hello-4
Goodbye, world 4
/usr>


Auch der etwas später compilierte erste Versuch von "qadc-1_0" ließ sich als Modul laden und auch wieder löschen, aber der nächste Schritt, daß auch der Befehl register_chrdev zum Einsatz kam, funktionierte noch nicht. Hier wieder der Output:

/usr> ls -l
-rw-r--r--    1 1000     100          4337 Mar  4  2005 boot_linux.cap
-rw-r--r--    1 1000     100        135796 Jun 29  2005 hello-4.o
drwxr-xr-x    2 1000     100           432 Mar  4  2005 led_test_cobra5282-20040324
-r-xr-xr-x    1 1000     100          3028 Mar  4  2005 led_test_cobra5282-20040324.tar.gz
-rw-r--r--    1 1000     100        136256 Jul  2  2005 qadc-1_0.o
-rwxr--r--    1 1000     100         20160 Jul  2  2005 readqadc-1_0
/usr> insmod qadc-1_0.o
Using qadc-1_0.o
QADC Driver 1.0
Device registered using major 254.
/usr> cd /dev
/dev> ls -l q*
crw-------    1 0        0        126,   0 Jan  1  1970 qspi0
crw-------    1 0        0        126,   1 Jan  1  1970 qspi1
crw-------    1 0        0        126,  10 Jan  1  1970 qspi10
crw-------    1 0        0        126,  11 Jan  1  1970 qspi11
crw-------    1 0        0        126,  12 Jan  1  1970 qspi12
crw-------    1 0        0        126,  13 Jan  1  1970 qspi13
crw-------    1 0        0        126,  14 Jan  1  1970 qspi14
crw-------    1 0        0        126,   2 Jan  1  1970 qspi2
crw-------    1 0        0        126,   3 Jan  1  1970 qspi3
crw-------    1 0        0        126,   4 Jan  1  1970 qspi4
crw-------    1 0        0        126,   5 Jan  1  1970 qspi5
crw-------    1 0        0        126,   6 Jan  1  1970 qspi6
crw-------    1 0        0        126,   7 Jan  1  1970 qspi7
crw-------    1 0        0        126,   8 Jan  1  1970 qspi8
crw-------    1 0        0        126,   9 Jan  1  1970 qspi9
/dev> cat qadc
qadc: No such file or directory
/dev> cd /usr
/usr> lsmod
Module                  Size  Used by    Not tainted
qadc-1_0                 584   0 (unused)
/usr> rmmod qadc-1_0
Goodbye, world
/usr>

Das Device qadc war nicht richtig registriert, obwohl die Routine erfolgreich zurückkehrte.

Hier der zugehörige Quellcode:

printk(KERN_ALERT "QADC Driver 1.0 \n");

/* Set up character device for user mode clients */

i = register_chrdev(0, "qadc", &qadc_fops);

if (i == -EBUSY){
    printk(KERN_NOTICE "unable to find a free device # for "
           "Driver Services\n");
}else{
    major_dev = i;
    printk("Device registered using major %d.\n", major_dev);
}

Etwas später lese ich hier , daß bei der Registrierung mit register_chrdev nicht ein Eintrag unter /dev entsteht, sondern unter /proc/devices.

Etwas später werden "printk"-Zeilen genannt, die dem User mitteilen, wie mit dem Shell-Kommando mknod ein Eintrag in /dev erreicht werden kann für dieses Char-Device.

In der Datei makedevs.c findet sich aber auch eine Methode, wie direkt der CC-Code im Treiber diesen mknod-befehl ausführen könnte.


Copyright © Andreas Birkert
Letzte Aktualisierung am 20. Dezember 2013
Home hello-4 auf COBRA unter Kernel 2.4 Die Lösung ist das Including von "Rules.make" Versuch "mknod" von Hand