Netzwerk log ?

Wünsche, Anträge, Fehlermeldungen
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Netzwerk log ?

Beitrag von mb405 »

ich schubs mal was an :roll:
es gibt doch die auswahl
Expert Boot-Konsole=seriell/framebuffer/null
kann man da nicht noch die einstellung netzwerk hinzufügen, denn ein serielle kabel haben ja nicht alle an der box. ein netzwerkkabel jedoch die mehrheit er user. nun könnte man doch die ausgaben, die kommen, umlenken auf die netzschnittstelle auf einen bestimmten port.

was sagt ihr dazu ??
jmittelst
Tuxboxer
Tuxboxer
Beiträge: 6044
Registriert: Montag 17. November 2003, 06:48

Beitrag von jmittelst »

Dumm ist dann aber, das bis zur Initialisierung des Netzwerks schon einiges auf der Box passiert ist.

cu
Jens
Npq
Senior Member
Beiträge: 1339
Registriert: Donnerstag 24. April 2003, 12:12

Beitrag von Npq »

Beim 2.6er geht das, AudioSlyer hatte damit mal experimentiert wenn ich mich richtig erinnere.

Beim 2.4er mußte man glaube ich noch Patches anwenden.

Verbindung ist dann wohl per UDP an einen Bootlogserver.
hannebamb(el)
Foren-Moderator
Beiträge: 297
Registriert: Montag 11. Oktober 2004, 14:51

Beitrag von hannebamb(el) »

Hatten wir mit experimentiert,
Source ist im db2w zu finden.
Funktioniert sogar recht gut, einziges tool was fehlen würde wäre ein win32 utility, was broadcast ethernet frames annimmt. Sonst läuft das einwandfrei

http://www.dbox2world.de/board/thread.p ... =6436&sid=


Erster Versuch:

http://www.dbox2world.de/board/thread.p ... =6416&sid=
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

na dann hab ich ja was zum basteln :)
ich werd euch bestimmt wieder nerven :roll:
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

irgendwie steh ich aufn schlauch.
also ich muss erst ales was im 1.versuch ist einbasteln, und dann die änderungen nehmen vom 2.versuch. oder hab ich da was falsch verstanden :gruebel:
hannebamb(el)
Foren-Moderator
Beiträge: 297
Registriert: Montag 11. Oktober 2004, 14:51

Beitrag von hannebamb(el) »

moin auch,

nee, der zweite ist eine weiterentwicklung des ersten, der erste ist als referenz noch da.
Du kannst also mit dem, was beim http://www.dbox2world.de/board/thread.p ... =6436&sid= steht, eine logfähige Version erstellen.

Hintergrund:
Wenn du nur im u-boot den console over udp aktivierst, siehst du auch nur die Ausgaben, die u-boot von sich gibt. d.h. es hört auf, sobald der kernel bootet (siehe thread von Audioslyer im db2w).

der erste patch implementiert die netconsole direkt im kernel. ich dachte, daß dann mehr nachrichten zu sehen sind. Dem war leider nicht so.
Die Implementierung als module ist meiner Ansicht nach flexibler, daher Ansatz 2.
Die netconsole jedoch liefert nur printk Meldungen.
Damit ergibt sich im Gegensatz zum seriellen log noch ein Unterschied, du wirst sehen, daß dann einige Zeilen fehlen. Darum mit Hilfe von socat ein console device erstellen und mit ioctl-TIOCCONS die console selber auf das ersrtellte device setzen.

Im Endeffekt hast du dann :
[...network console startup...]
netconsole: network logging started
Using /lib/modules/2.4.27-dbox2/misc/event.o
event: $Id: event.c,v 1.12 2003/09/30 05:45:38 obi Exp $
Using /lib/modules/2.4.27-dbox2/misc/tuxbox.o
Using /lib/modules/2.4.27-dbox2/misc/dvb-core.o
Using /lib/modules/2.4.27-dbox2/misc/dbox2_i2c.o
[i2c-8xx]: mpc 8xx i2c init
[i2c-8xx]: adapter: 0
Using /lib/modules/2.4.27-dbox2/misc/dbox2_fp.o
Using /lib/modules/2.4.27-dbox2/misc/dbox2_fp_input.o
Using /lib/modules/2.4.27-dbox2/misc/avs.o
Using /lib/modules/2.4.27-dbox2/misc/saa7126.o
Detected STB:
Vendor: Sagem
Model: D-BOX2
Using /lib/modules/2.4.27-dbox2/misc/cam.o
$Id: cam.c,v 1.30 2004/01/10 16:36:34 alexw Exp $
cam: no firmware file found
Using /lib/modules/2.4.27-dbox2/misc/dvb_i2c_bridge.o
Using /lib/modules/2.4.27-dbox2/misc/avia_napi.o
$Id: avia_napi.c,v 1.18 2003/11/24 09:53:01 obi Exp $
DVB: registering new adapter (C-Cube AViA GTX/eNX with AViA 500/600).
dvb_i2c_bridge: enabled DVB i2c bridge to PowerPC 8xx I2C adapter
Using /lib/modules/2.4.27-dbox2/misc/cam_napi.o
$Id: cam_napi.c,v 1.8 2003/09/30 05:45:34 obi Exp $
Using /lib/modules/2.4.27-dbox2/misc/dbox2_fp_napi.o
Using /lib/modules/2.4.27-dbox2/misc/avia_av.o
avia_av: $Id: avia_av_core.c,v 1.98 2004/11/21 20:33:38 carjay Exp $
avia_av_core.c: avia_av_firmware_read: Unable to load '/var/tuxbox/ucodes/avia600.ux'.
avia_av: microcode not found, setting up dummy
avia_av_proc: $Id: avia_av_proc.c,v 1.14 2004/01/21 20:02:29 carjay Exp $
Using /lib/modules/2.4.27-dbox2/misc/avia_gt.o
avia_gt_core: $Id: avia_gt_core.c,v 1.48 2004/12/20 01:01:22 carjay Exp $
avia_gt_core: autodetecting chip type... eNX
avia_gt_enx: $Id: avia_gt_enx.c,v 1.21 2003/09/30 05:45:35 obi Exp $
avia_gt_accel: $Id: avia_gt_accel.c,v 1.19 2003/09/30 05:45:35 obi Exp $
avia_gt_dmx: $Id: avia_gt_dmx.c,v 1.210 2004/06/26 16:08:15 carjay Exp $
avia_gt_ucode: loaded ucode v0014
avia_gt_ucode: ucode section filters enabled.
avia_gt_dmx: warning, misaligned queue 0 (is 0xFD200, size 65536), aligning...
avia_gt_gv: $Id: avia_gt_gv.c,v 1.39 2004/08/28 16:44:56 carjay Exp $
avia_gt_gv: set_input_size (width=720, height=576)
avia_gt_pcm: $Id: avia_gt_pcm.c,v 1.29 2004/01/29 19:38:20 zwen Exp $
avia_gt_pcm_set_rate(44100)
avia_gt_capture: $Id: avia_gt_capture.c,v 1.32 2003/09/30 05:45:35 obi Exp $
avia_gt_pig: $Id: avia_gt_pig.c,v 1.40 2003/09/30 05:45:35 obi Exp $
avia_gt_vbi: $Id: avia_gt_vbi.c,v 1.26 2003/08/01 17:31:22 obi Exp $
avia_gt_core: Loaded AViA eNX/GTX driver
Using /lib/modules/2.4.27-dbox2/misc/avia_gt_fb.o
avia_av_core: Starting avia_gt_wdt thread.
avia_gt_fb: $Id: avia_gt_fb_core.c,v 1.54 2004/03/17 18:42:18 zwen Exp $
avia_gt_gv: set_input_mode (mode=2)
avia_gt_gv: set_input_size (width=720, height=576)
avia_gt_gv: set_input_mode (mode=2)
avia_gt_gv: set_input_size (width=720, height=576)
avia_gt_gv: set_input_mode (mode=2)
avia_gt_gv: set_input_size (width=720, height=576)
Console: switching to colour frame buffer device 82x32
avia_gt_fb: fb0: AViA eNX/GTX Framebuffer frame buffer device
Using /lib/modules/2.4.27-dbox2/misc/lcd.o
lcd.o: init lcd driver module
lcd.o: found KS0713/SED153X lcd interface
Using /lib/modules/2.4.27-dbox2/misc/avia_gt_lirc.o
avia_gt_lirc: $Id: avia_gt_lirc.c,v 1.14 2003/09/30 05:45:35 obi Exp $
avia_gt_ir: $Id: avia_gt_ir.c,v 1.30 2003/09/30 05:45:35 obi Exp $
Using /lib/modules/2.4.27-dbox2/misc/avia_gt_oss.o
avia_oss: $Id: avia_gt_oss.c,v 1.26 2004/05/31 22:56:02 carjay Exp $
avia_gt_pcm_set_rate(44100)
Using /lib/modules/2.4.27-dbox2/misc/avia_gt_v4l2.o
avia_gt_v4l2: $Id: avia_gt_v4l2.c,v 1.12 2003/09/30 04:54:03 obi Exp $
Using /lib/modules/2.4.27-dbox2/misc/at76c651.o
Using /lib/modules/2.4.27-dbox2/misc/ves1x93.o
DVB: registering frontend 0:0 (VES1993)...
Using /lib/modules/2.4.27-dbox2/misc/avia_av_napi.o
avia_av_napi.c: $Id: avia_av_napi.c,v 1.33 2004/03/11 15:30:27 derget Exp $
Using /lib/modules/2.4.27-dbox2/misc/avia_gt_napi.o
avia_gt_napi: $Id: avia_gt_napi.c,v 1.203 2005/01/05 05:49:56 carjay Exp $
Using /lib/modules/2.4.27-dbox2/misc/dvb2eth.o
Using /lib/modules/2.4.27-dbox2/misc/aviaEXT.o
Starting pid 84, console /dev/console: '/etc/init.d/start'

Please press Enter to activate this console. $Id: sectionsd.cpp,v 1.181 2005/03/08 13:39:08 metallica Exp $
caching 504 hours
events are old 180min after their end time
[[camd] CA_SEND_MSG: No such device
[camd] CA_SEND_MSG: No such device
ConfigFile] Unable to open file /var/tuxbox/config/timerd.conf for reading.
$Id: zapit.cpp,v 1.370 2005/03/14 19:58:48 mws Exp $
/var/tuxbox/config/zapit/services.xml: No such file or directory
[zapit.cpp:main:1841] error parsing services
$Id: controld.cpp,v 1.117 2004/05/22 14:34:09 carjay Exp $

[controld] Boxtype detected: (3, Sagem D-BOX2)
[nhttpd] Neutrino HTTP-Server starting..
avia_av: new_audio_config timeout
[frontend.cpp:setDiseqcType:371] NO_DISEQC
avia_av: new_audio_config timeout
[neutrino] frameBuffer Instance created
812k video mem
avia_gt_gv: set_input_mode (mode=2)
avia_gt_gv: set_input_size (width=720, height=576)
[neutrino] Software update enabled
[neutrino] enable flash
[lcdd] time-skin not found -> using default...
[lcdd] weekday-skin not found -> using default...
[lcdd] date-skin not found -> using default...
[lcdd] month-skin not found -> using default...
[LCDFONT] initializing core...
[LCDFONT] adding font /share/fonts/12.pcf.gz...OK (Fix12/Regular)
[LCDFONT] adding font /share/fonts/14B.pcf.gz...OK (Fix14/Bold)
[LCDFONT] adding font /share/fonts/15B.pcf.gz...OK (Fix15/Bold)
[LCDFONT] Intializing font cache...
[LCDFONT] FTC_Face_Requester (Fix15/Bold)
[LCDFONT] FTC_Face_Requester (Fix14/Bold)
/dev/input/event1: No such file or directory
[neutrino] menue setup
loading locales: scandir: No such file or directory
[neutrino] received 17 sats
[neutrino] registering as event client
Im Gegesatz zu einem vollständigen Bootlog über die serielle Schnittstelle hast du natürlich weniger Infos, aber es ist fast alles da
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

:gruebel:
also versehe ich das jetzt richtig, das ich nur die linux/.config beabeiten muss ?

Code: Alles auswählen

...
# CONFIG_FDDI is not set
+CONFIG_NETCONSOLE=m
 # CONFIG_HIPPI is not set
...
dann die rcs bearbeiten, und die 2 dateien socat+setconsole2 ins image legen.

das windows tool von elinas_of_alba kann man dann zum auswerten nehmen ?
hannebamb(el)
Foren-Moderator
Beiträge: 297
Registriert: Montag 11. Oktober 2004, 14:51

Beitrag von hannebamb(el) »

damit diese kernel config option benutzt werden kann, ist ein diff notwendig

danach kannst du die kernel option in der .config enablen.
Danach kannst du den kernel neu bauen.
dann die rcS anpassne mit
insmod netconsole config=@/-6666@192.168.99.249/
damit hast du dann einen Teil geschafft.

Weiter im Text:
mit dem socat kannst du ein console device erstellen.
mit dem setconsole2 kannst du die default console umleiten auf die netzwerk konsole.
.....einziges tool was fehlen würde wäre ein win32 utility, was ......
Da das Netzwerk hier noch nicht richtig initialisiert ist, werden hier keine richtigen udp Pakete versendet, sondern "Broadcast" Ethernet Frames, d.h. Pakete, die eigentlich nicht ganz der Norm entsprechen.
Es gibt bisher kein win32 tool dafür, müsste bei Interesse jemand bauen.
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

damit diese kernel config option benutzt werden kann, ist ein diff notwendig
? jetz blick ich gar net mehr durch

also doch die diff aus dem ersten beitrag
(enet.c,makefile,netconsole.c,netdevice.h)
hannebamb(el)
Foren-Moderator
Beiträge: 297
Registriert: Montag 11. Oktober 2004, 14:51

Beitrag von hannebamb(el) »

Code: Alles auswählen

diff -Naur /tmp/linux-2.4.27/include/linux/netdevice.h linux-2.4.27/include/linux/netdevice.h
--- /tmp/linux-2.4.27/include/linux/netdevice.h	2005-04-18 13:32:27.000000000 +0200
+++ linux-2.4.27/include/linux/netdevice.h	2005-04-06 20:47:56.000000000 +0200
@@ -436,7 +436,9 @@
 						     unsigned char *haddr);
 	int			(*neigh_setup)(struct net_device *dev, struct neigh_parms *);
 	int			(*accept_fastpath)(struct net_device *, struct dst_entry*);
-
+#define HAVE_POLL_CONTROLLER
+        void			(*poll_controller)(struct net_device *dev);
+	
 	/* open/release and usage marking */
 	struct module *owner;
-/arch/ppc/8xx_io/enet.c um die netpoll funktionalität

Code: Alles auswählen

diff -Naur /tmp/linux-2.4.27/arch/ppc/8xx_io/enet.c linux-2.4.27/arch/ppc/8xx_io/enet.c
--- /tmp/linux-2.4.27/arch/ppc/8xx_io/enet.c	2005-04-18 13:26:57.000000000 +0200
+++ linux-2.4.27/arch/ppc/8xx_io/enet.c	2005-03-28 22:17:31.000000000 +0200
@@ -137,6 +137,8 @@
 static int scc_enet_close(struct net_device *dev);
 static struct net_device_stats *scc_enet_get_stats(struct net_device *dev);
 static void set_multicast_list(struct net_device *dev);
+static void scc_enet_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+static void scc_enet_poll(struct net_device *dev);
 
 /* Get this from various configuration locations (depends on board).
 */
@@ -165,6 +167,7 @@
 #error CONFIG_SCCx_ENET not defined
 #endif
 
+
 static int
 scc_enet_open(struct net_device *dev)
 {
@@ -645,6 +648,22 @@
 	return &cep->stats;
 }
 
+#ifdef HAVE_POLL_CONTROLLER
+
+/*
+ *Polling 'interrupt' - used by things like netconsole to send skbs
+ *without having to reenable interrupts. It's not called while
+ *the interrupt routine is executing.
+ */ 
+static void scc_enet_poll(struct net_device *dev)
+{
+    disable_irq(dev->irq);
+    scc_enet_interrupt(dev->irq,dev,NULL);
+    enable_irq(dev->irq);
+}
+
+#endif
+
 /* Set or clear the multicast filter for this adaptor.
  * Skeleton taken from sunlance driver.
  * The CPM Ethernet implementation allows Multicast as well as individual
@@ -1043,7 +1062,9 @@
 	dev->stop = scc_enet_close;
 	dev->get_stats = scc_enet_get_stats;
 	dev->set_multicast_list = set_multicast_list;
-
+#ifdef HAVE_POLL_CONTROLLER	
+	dev->poll_controller=scc_enet_poll;
+#endif	
 	/* And last, enable the transmit and receive processing.
 	*/
 	sccp->scc_gsmrl |= (SCC_GSMRL_ENR | SCC_GSMRL_ENT);

die netconsole selbst:

Code: Alles auswählen

diff -Naur /tmp/linux-2.4.27/arch/ppc/8xx_io/netconsole.c linux-2.4.27/arch/ppc/8xx_io/netconsole.c
--- /tmp/linux-2.4.27/arch/ppc/8xx_io/netconsole.c	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.4.27/arch/ppc/8xx_io/netconsole.c	2005-04-18 17:51:17.000000000 +0200
@@ -0,0 +1,498 @@
+/*
+ *  linux/drivers/net/netconsole.c
+ *
+ *  Copyright (C) 2001  Ingo Molnar <mingo@redhat.com>
+ *
+ *  This file contains the implementation of an IRQ-safe, crash-safe
+ *  kernel console implementation that outputs kernel messages to the
+ *  network.
+ *
+ * Modification history:
+ *
+ * 2001-09-17    started by Ingo Molnar.
+ * 2003-08-11    2.6 port by Matt Mackall
+ *               simplified options
+ *               added TLAN
+ *               works non-modular
+ * 2005-04-02    modified as backport for kernel 2.4
+ *               works as /dev/console now
+ */
+
+/****************************************************************
+ *      This program is free software; you can redistribute it and/or modify
+ *      it under the terms of the GNU General Public License as published by
+ *      the Free Software Foundation; either version 2, or (at your option)
+ *      any later version.
+ *
+ *      This program is distributed in the hope that it will be useful,
+ *      but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *      GNU General Public License for more details.
+ *
+ *      You should have received a copy of the GNU General Public License
+ *      along with this program; if not, write to the Free Software
+ *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ ****************************************************************/
+
+#include <net/tcp.h>
+#include <net/udp.h>
+#include <linux/mm.h>
+#include <linux/tty.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <asm/unaligned.h>
+#include <linux/console.h>
+#include <linux/smp_lock.h>
+#include <linux/netdevice.h>
+#include <linux/tty_driver.h>
+#include <linux/etherdevice.h>
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/string.h>
+#include <linux/inetdevice.h>
+#include <linux/delay.h>
+
+static struct net_device *netconsole_dev;
+static kdev_t netconsole_console_device(struct console *c);
+
+static u16 source_port=6665, target_port=6666;
+static u32 source_ip=0x00000000, target_ip=0xFFFFFFFF;
+static unsigned char daddr[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff} ;
+//static unsigned char daddr[6] = {0x00, 0x50, 0xDA, 0x4C, 0x61, 0x36} ;
+
+
+#define NETCONSOLE_VERSION 0x01
+#define HEADER_LEN 5
+
+#define MAX_UDP_CHUNK 1460
+#define MAX_PRINT_CHUNK (MAX_UDP_CHUNK-HEADER_LEN)
+
+/*
+ * We maintain a small pool of fully-sized skbs,
+ * to make sure the message gets out even in
+ * extreme OOM situations.
+ */
+#define MAX_NETCONSOLE_SKBS 32
+
+static spinlock_t netconsole_lock = SPIN_LOCK_UNLOCKED;
+static int nr_netconsole_skbs;
+static struct sk_buff *netconsole_skbs;
+
+#define MAX_SKB_SIZE \
+		(MAX_UDP_CHUNK + sizeof(struct udphdr) + \
+				sizeof(struct iphdr) + sizeof(struct ethhdr))
+
+static void __refill_netconsole_skbs(void)
+{
+	struct sk_buff *skb;
+	unsigned long flags;
+
+	spin_lock_irqsave(&netconsole_lock, flags);
+	while (nr_netconsole_skbs < MAX_NETCONSOLE_SKBS) {
+		skb = alloc_skb(MAX_SKB_SIZE, GFP_ATOMIC);
+		if (!skb)
+			break;
+		if (netconsole_skbs)
+			skb->next = netconsole_skbs;
+		else
+			skb->next = NULL;
+		netconsole_skbs = skb;
+		nr_netconsole_skbs++;
+	}
+	spin_unlock_irqrestore(&netconsole_lock, flags);
+}
+
+static struct sk_buff * get_netconsole_skb(void)
+{
+	struct sk_buff *skb;
+
+	unsigned long flags;
+
+	spin_lock_irqsave(&netconsole_lock, flags);
+	skb = netconsole_skbs;
+	if (skb)
+		netconsole_skbs = skb->next;
+	skb->next = NULL;
+	nr_netconsole_skbs--;
+	spin_unlock_irqrestore(&netconsole_lock, flags);
+
+	return skb;
+}
+
+static spinlock_t sequence_lock = SPIN_LOCK_UNLOCKED;
+static unsigned int offset;
+
+static void send_netconsole_skb(struct net_device *dev, const char *msg, unsigned int msg_len)
+{
+	int total_len, eth_len, ip_len, udp_len;
+	unsigned long flags;
+	struct sk_buff *skb;
+	struct udphdr *udph;
+	struct iphdr *iph;
+	struct ethhdr *eth;
+
+	udp_len = msg_len + HEADER_LEN + sizeof(*udph);
+	ip_len = eth_len = udp_len + sizeof(*iph);
+	total_len = eth_len + ETH_HLEN;
+
+	if (nr_netconsole_skbs < MAX_NETCONSOLE_SKBS)
+		__refill_netconsole_skbs();
+
+	skb = alloc_skb(total_len, GFP_ATOMIC);
+	if (!skb) {
+		skb = get_netconsole_skb();
+		if (!skb)
+			/* tough! */
+			return;
+	}
+
+	atomic_set(&skb->users, 1);
+	skb_reserve(skb, total_len - msg_len - HEADER_LEN);
+	skb->data[0] = NETCONSOLE_VERSION;
+
+	spin_lock_irqsave(&sequence_lock, flags);
+	put_unaligned(htonl(offset), (u32 *) (skb->data + 1));
+	offset += msg_len;
+	spin_unlock_irqrestore(&sequence_lock, flags);
+
+	memcpy(skb->data + HEADER_LEN, msg, msg_len);
+	skb->len += msg_len + HEADER_LEN;
+
+	udph = (struct udphdr *) skb_push(skb, sizeof(*udph));
+	udph->source = source_port;
+	udph->dest = target_port;
+	udph->len = htons(udp_len);
+	udph->check = 0;
+
+	iph = (struct iphdr *)skb_push(skb, sizeof(*iph));
+
+	iph->version  = 4;
+	iph->ihl      = 5;
+	iph->tos      = 0;
+        iph->tot_len  = htons(ip_len);
+	iph->id       = 0;
+	iph->frag_off = 0;
+	iph->ttl      = 64;
+        iph->protocol = IPPROTO_UDP;
+	iph->check    = 0;
+        iph->saddr    = source_ip;
+        iph->daddr    = target_ip;
+	iph->check    = ip_fast_csum((unsigned char *)iph, iph->ihl);
+
+	eth = (struct ethhdr *) skb_push(skb, ETH_HLEN);
+
+	eth->h_proto = htons(ETH_P_IP);
+	memcpy(eth->h_source, dev->dev_addr, dev->addr_len);
+	memcpy(eth->h_dest, daddr, dev->addr_len);
+
+repeat:
+	spin_lock(&dev->xmit_lock);
+	dev->xmit_lock_owner = smp_processor_id();
+
+	if (netif_queue_stopped(dev)) {
+		dev->xmit_lock_owner = -1;
+		spin_unlock(&dev->xmit_lock);
+
+		dev->poll_controller(dev);
+		goto repeat;
+	}
+
+	dev->hard_start_xmit(skb, dev);
+
+	dev->xmit_lock_owner = -1;
+	spin_unlock(&dev->xmit_lock);
+}
+
+static void write_netconsole_msg(struct console *con, const char *msg, unsigned int msg_len)
+{
+	int len, left;
+	struct net_device *dev;
+
+	dev = netconsole_dev;
+	if (!dev)
+		return;
+
+	if (dev->poll_controller && netif_running(dev)) {
+		unsigned long flags;
+
+		__save_flags(flags);
+		local_irq_disable();
+		left = msg_len;
+repeat:
+		if (left > MAX_PRINT_CHUNK)
+			len = MAX_PRINT_CHUNK;
+		else
+			len = left;
+		send_netconsole_skb(dev, msg, len);
+		msg += len;
+		left -= len;
+		if (left)
+			goto repeat;
+		local_irq_restore(flags);
+	}
+}
+
+static char dev_name[16]="eth0";
+static char config[256];
+//module_param_string(netconsole, config, 256, 0);
+MODULE_PARM(netconsole,"s");
+MODULE_PARM_DESC(netconsole, " netconsole=[src-port]@[src-ip]/[dev],[tgt-port]@<tgt-ip>/[tgt-macaddr]\n");
+
+static kdev_t netconsole_console_device(struct console *c)
+{
+    return MKDEV(TTY_MAJOR,63);
+}
+
+static int netconsole_console_setup(struct console *cons, char *str)
+{
+    return 0;
+}
+
+static struct console netconsole =
+	 { name: 	"netc",
+	   write: 	write_netconsole_msg,
+	   device: 	netconsole_console_device,
+	   flags: 	CON_ENABLED 
+	 };
+
+//setup: netconsole_console_setup,
+	   
+
+
+static int option_setup(char *opt)
+{
+	char *cur=opt, *delim;
+	int a,b,c,d;
+
+	printk(KERN_INFO "netconsole options: \"%s\"\n", opt);
+
+	if(*cur != '@') {
+		/* src port */
+		if ((delim = strchr(cur, '@')) == NULL)
+			goto parse_failed;
+		*delim=0;
+		source_port=simple_strtol(cur, 0, 10);
+		cur=delim;
+	}
+	cur++;
+	printk(KERN_INFO "netconsole: source port %d\n", source_port);
+
+	if(*cur != '/') {
+		/* src ip */
+		if ((delim = strchr(cur, '.')) == NULL)
+			goto parse_failed;
+		*delim=0;
+		a=simple_strtol(cur, 0, 10);
+		cur=delim+1;
+		if ((delim = strchr(cur, '.')) == NULL)
+			goto parse_failed;
+		*delim=0;
+		b=simple_strtol(cur, 0, 10);
+		cur=delim+1;
+		if ((delim = strchr(cur, '.')) == NULL)
+			goto parse_failed;
+		*delim=0;
+		c=simple_strtol(cur, 0, 10);
+		cur=delim+1;
+		if ((delim = strchr(cur, '/')) == NULL)
+			goto parse_failed;
+		*delim=0;
+		d=simple_strtol(cur, 0, 10);
+		cur=delim;
+		
+		source_ip=(a<<24)+(b<<16)+(c<<8)+(d);
+#define IP(x) ((unsigned char *)&source_ip)[x]
+		printk(KERN_INFO "netconsole: source IP %u.%u.%u.%u\n",
+		       IP(3), IP(2), IP(1), IP(0));
+#undef IP
+	}
+	cur++;
+
+	if ( *cur != '*') {
+		/* parse out dev name */
+		if ((delim = strchr(cur, '*')) == NULL)
+			goto parse_failed;
+		*delim=0;
+		strncpy(dev_name, cur, sizeof(dev_name));
+		cur=delim;
+	}
+	cur++;
+
+	printk(KERN_INFO "netconsole: interface %s\n", dev_name);
+
+	if ( *cur != '@' ) {
+		/* dst port */
+		if ((delim = strchr(cur, '@')) == NULL)
+			goto parse_failed;
+		*delim=0;
+		target_port=simple_strtol(cur, 0, 10);
+		cur=delim;
+	}
+	cur++;
+	printk(KERN_INFO "netconsole: target port %d\n", target_port);
+
+	/* dst ip */
+	if ((delim = strchr(cur, '.')) == NULL)
+		goto parse_failed;
+	*delim=0;
+	a=simple_strtol(cur, 0, 10);
+	cur=delim+1;
+	if ((delim = strchr(cur, '.')) == NULL)
+		goto parse_failed;
+	*delim=0;
+	b=simple_strtol(cur, 0, 10);
+	cur=delim+1;
+	if ((delim = strchr(cur, '.')) == NULL)
+		goto parse_failed;
+	*delim=0;
+	c=simple_strtol(cur, 0, 10);
+	cur=delim+1;
+	if ((delim = strchr(cur, '/')) == NULL)
+		goto parse_failed;
+	*delim=0;
+	d=simple_strtol(cur, 0, 10);
+	cur=delim+1;
+
+	target_ip=(a<<24)+(b<<16)+(c<<8)+(d);
+
+#define IP(x) ((unsigned char *)&target_ip)[x]
+		printk(KERN_INFO "netconsole: target IP %u.%u.%u.%u\n",
+		       IP(0), IP(1), IP(2), IP(3));
+#undef IP
+
+	if( *cur != 0 )
+	{
+		/* MAC address */
+		if ((delim = strchr(cur, ':')) == NULL)
+			goto parse_failed;
+		*delim=0;
+		daddr[0]=simple_strtol(cur, 0, 16);
+		cur=delim+1;
+		if ((delim = strchr(cur, ':')) == NULL)
+			goto parse_failed;
+		*delim=0;
+		daddr[1]=simple_strtol(cur, 0, 16);
+		cur=delim+1;
+		if ((delim = strchr(cur, ':')) == NULL)
+			goto parse_failed;
+		*delim=0;
+		daddr[2]=simple_strtol(cur, 0, 16);
+		cur=delim+1;
+		if ((delim = strchr(cur, ':')) == NULL)
+			goto parse_failed;
+		*delim=0;
+		daddr[3]=simple_strtol(cur, 0, 16);
+		cur=delim+1;
+		if ((delim = strchr(cur, ':')) == NULL)
+			goto parse_failed;
+		*delim=0;
+		daddr[4]=simple_strtol(cur, 0, 16);
+		cur=delim+1;
+		daddr[5]=simple_strtol(cur, 0, 16);
+	}
+
+	printk(KERN_INFO "netconsole: target ethernet address "
+	       "%02x:%02x:%02x:%02x:%02x:%02x\n", 
+	       daddr[0], daddr[1], daddr[2], daddr[3], daddr[4], daddr[5]);
+
+	return 0;
+
+ parse_failed:
+	printk(KERN_INFO "netconsole: couldn't parse config at %s!\n",cur);
+	return -1;
+}
+
+__setup("netconsole=", option_setup);
+
+static int init_netconsole(void)
+{
+	struct net_device *ndev = NULL;
+	struct in_device *in_dev;
+	int ret;
+
+	if(strlen(config)) 
+	{
+	    ret=option_setup(config);
+	    if(ret!=0)
+	    {
+		return ret;
+	    }
+	}
+/*	else if (strlen(netconsole))
+	{
+	    ret=option_setup(netconsole);
+	    if(ret!=0)
+	    {
+		return ret;
+	    }		
+	}
+*/
+	// this will be valid once the device goes up.
+	if (*dev_name != 0)
+		ndev = dev_get_by_name(dev_name);
+	if (!ndev) {
+		printk(KERN_ERR "netconsole: %s doesn't exist, aborting.\n", 
+		       dev_name);
+		return -1;
+	}
+	if (!ndev->poll_controller) {
+		printk(KERN_ERR "netconsole: %s's network driver does not"
+		       " implement netlogging yet, aborting.\n", dev_name);
+		return -1;
+	}
+        in_dev = in_dev_get(ndev);
+	if (!in_dev) {
+		printk(KERN_ERR "netconsole: network device %s is not an" 
+		       " IP protocol device, winging it.\n", dev_name);
+	}
+/*
+	if (!source_ip) {
+		source_ip = ntohl(in_dev->ifa_list->ifa_local);
+
+		if(!source_ip) {
+			printk(KERN_ERR "netconsole: network device %s has no"
+			       " local address, aborting.\n", dev_name);
+			return -1;
+		}
+
+#define IP(x) ((unsigned char *)&source_ip)[x]
+		printk(KERN_INFO "netconsole: source IP %u.%u.%u.%u\n",
+		       IP(0), IP(1), IP(2), IP(3));
+#undef IP
+	}
+*/
+	source_ip = htonl(source_ip);
+	source_port = htons(source_port);
+	target_ip = htonl(target_ip);
+	target_port = htons(target_port);
+
+	netconsole_dev = ndev;
+#define STARTUP_MSG "[...network console startup...]\n"
+	write_netconsole_msg(NULL, STARTUP_MSG, strlen(STARTUP_MSG));
+
+	register_console(&netconsole);
+	printk(KERN_INFO "netconsole: network logging started\n");
+
+	return 0;
+}
+
+static void cleanup_netconsole(void)
+{
+	printk(KERN_INFO "netconsole: network logging shut down.\n");
+	unregister_console(&netconsole);
+
+#define SHUTDOWN_MSG "[...network console shutdown...]\n"
+	write_netconsole_msg(NULL, SHUTDOWN_MSG, strlen(SHUTDOWN_MSG));
+	netconsole_dev = NULL;
+}
+
+module_init(init_netconsole);
+module_exit(cleanup_netconsole);
+
+int dummy = MAX_SKB_SIZE;
das makefile

Code: Alles auswählen

diff -Naur /tmp/linux-2.4.27/arch/ppc/8xx_io/Makefile linux-2.4.27/arch/ppc/8xx_io/Makefile
--- /tmp/linux-2.4.27/arch/ppc/8xx_io/Makefile	2003-06-13 16:51:31.000000000 +0200
+++ linux-2.4.27/arch/ppc/8xx_io/Makefile	2005-04-06 20:43:07.000000000 +0200
@@ -14,5 +14,6 @@
 obj-$(CONFIG_FEC_ENET)	+= fec.o
 obj-$(CONFIG_SCC_ENET)	+= enet.o
 obj-$(CONFIG_UCODE_PATCH) += micropatch.o
+obj-$(CONFIG_NETCONSOLE) += netconsole.o
 
diesen ganzen diffs wendest du an, aber halt auf kernel 2.4.31 anstelle 2.4.27

Wenn das geht, hast du teil 1 geschafft
Dann änderst du anstelle von config_netconsole=y config_netsonsole=m
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

also jetzt hat der mir schon mal in

image/dbox2/cdkflash/root/lib/modules/2.4.31-dbox2/kernel/arch/ppc/8xx_io
die netconsole.o eingemacht :)

nun muss ich noch das mit der cs hinbekommen, dann kann ich ja mal testen.

rcS:

Code: Alles auswählen

ifconfig eth0 192.168.99.101

insmod netconsole config=@/-6666@192.168.99.249/
/sbin/socat PTY,link=/dev/ttyP0  UDP:192.168.99.249:6666 &
und weiter unten

Code: Alles auswählen

/sbin/setconsole2
mhh meine rcs sieht so aus

Code: Alles auswählen

# ---------------------------Zeitformat setzen--------------------------------
. /etc/profile

# ----------------------Den Hostnamen (dbox) festlegen------------------------
hostname -F /etc/hostname

DA DEN ERSTEN TEIL REIN

PS grad eingebaut. und as kommt nun :(
[quote]
socat: error while loading shared libraries: libutil.so.1: cannot open shared object file: No such file or directoy
[quote]
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

aha, hatte vergessen die 2 dateien mit neu zu strippen.
jetzt passts.
hannebamb(el)
Foren-Moderator
Beiträge: 297
Registriert: Montag 11. Oktober 2004, 14:51

Beitrag von hannebamb(el) »

moin auch,

na das freut mich doch, daß das jetzt klappt.
Hast du schon mitgeloggt ?
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

ja
er zeigt zwar nicht alles an, warum auch immer, aber es klappt einwandfrei.
hannebamb(el)
Foren-Moderator
Beiträge: 297
Registriert: Montag 11. Oktober 2004, 14:51

Beitrag von hannebamb(el) »

mb405 hat geschrieben:ja
er zeigt zwar nicht alles an, warum auch immer, aber es klappt einwandfrei.
was heisst nicht alles ?
wenn du damit meinst, das er erst "später" im bootprozess ansetzt, so stimmt das tatsächlich. Wenn dir allerdings sonst Nachrichten fehlen sollten, so ist vielleicht das udp console device nicht korrekt.
Paste doch mal nen Log, dann können wir schauen.
PT-1
Moderator english
Beiträge: 2458
Registriert: Donnerstag 20. Dezember 2001, 00:00

Beitrag von PT-1 »

@MB405

Koenntest du bitte die relevanten Files mal gezipped bei http://www.yousendit.com oder wenn vorhanden eigenen Homepage hochladen.

Eventuell mit TXT oder Guide hier im topic wie und wo man die Files installieren muss


DANKE

PT-1
hannebamb(el)
Foren-Moderator
Beiträge: 297
Registriert: Montag 11. Oktober 2004, 14:51

Beitrag von hannebamb(el) »

PT-1 hat geschrieben:@MB405

Koenntest du bitte die relevanten Files mal gezipped bei http://www.yousendit.com oder wenn vorhanden eigenen Homepage hochladen.

Eventuell mit TXT oder Guide hier im topic wie und wo man die Files installieren muss


DANKE

PT-1
Hmm, 6 Posts drüber hab ich's geposted :gruebel:
Die diffs anwenden auf den kernel


oder was meinst du ?
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

also es fehlen ausgaben der sectionsd und zapit. zbsp
auch printf es , die ich in den startdateien habe zeigt er nicht an.
hannebamb(el)
Foren-Moderator
Beiträge: 297
Registriert: Montag 11. Oktober 2004, 14:51

Beitrag von hannebamb(el) »

mb405 hat geschrieben:also es fehlen ausgaben der sectionsd und zapit. zbsp
auch printf es , die ich in den startdateien habe zeigt er nicht an.
dann würde ich sagen, daß die socat Geschichte nicht sauber ist.
Hast du auch
/sbin/socat PTY,link=/dev/ttyP0 UDP:192.168.99.249:6666 &
in der rcS gemacht ?

Ziel-IP und Port auf die gleiche Adresse wie für die netconsole
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

also meine rcs sieht so aus
# -----------------Pfad zu insmod und den Modules festlegen-------------------
export IM="/sbin/insmod"
export MD="/lib/modules/"$(uname -r)"/misc"

# ---------------------------Zeitformat setzen--------------------------------
. /etc/profile

# ----------------------Den Hostnamen (dbox) festlegen------------------------
hostname -F /etc/hostname

# -----------------------------Netconsole sachen------------------------------
if [ -e /var/bin/socat ]; then
echo "############## Netconsole gstartet! ################"
ifconfig eth0 192.168.123.15 #bitte die ip der box hier eingeben
insmod netconsole
/var/bin/socat PTY,link=/dev/ttyP0 UDP:192.168.123.4:6666 & #bitte die ip des rechners wo logger läuft eingeben
/var/bin/setconsole2
fi
# ------------------------------Module laden----------------------------------
$IM $MD/event.o
$IM $MD/tuxbox.o
...
hannebamb(el)
Foren-Moderator
Beiträge: 297
Registriert: Montag 11. Oktober 2004, 14:51

Beitrag von hannebamb(el) »

Nabend,

du musst auch der netconsole mitteilen, wohin du loggen willst:
-----------------------------Netconsole sachen------------------------------
if [ -e /var/bin/socat ]; then
echo "############## Netconsole gstartet! ################"
ifconfig eth0 192.168.123.15 #bitte die ip der box hier eingeben
insmod netconsole config=@/-6666@192.168.123.4/ #bitte die ip des rechners wo logger läuft eingeben
/var/bin/socat PTY,link=/dev/ttyP0 UDP:192.168.123.4:6666 & #bitte die ip des rechners wo logger läuft eingeben
/var/bin/setconsole2
fi
# ------------------------------Module laden----------------------------------
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

da meckert der rum, wenn ich starte.
morgen poste ich mal die ausgaben
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

ich hatte make linuxdir zwischenzeitlich gemacht, und da hat er alles wieder rausgeschmissen. kann ich das mit einen diff irgendwie für immer machen ?
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

ich habs wieder reingebastelt

Code: Alles auswählen

Using /lib/modules/2.4.31-dbox2/kernel/arch/ppc/8xx_io/netconsole.o
insmod: invalid parameter config
es liegt wohl an der zeile

Code: Alles auswählen

insmod netconsole config=@/-6666@192.168.123.4/ 
wenn ich das eingebe

Code: Alles auswählen

insmod netconsole
läuft es zumindest.

hab ich wohl ne falsche netconsole.c ??