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 |