Netzwerk log ?
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
Netzwerk log ?
ich schubs mal was an
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 ??
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 ??
-
- Tuxboxer
- Beiträge: 6044
- Registriert: Montag 17. November 2003, 06:48
-
- Senior Member
- Beiträge: 1339
- Registriert: Donnerstag 24. April 2003, 12:12
-
- Foren-Moderator
- Beiträge: 297
- Registriert: Montag 11. Oktober 2004, 14:51
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=
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=
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
-
- Foren-Moderator
- Beiträge: 297
- Registriert: Montag 11. Oktober 2004, 14:51
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 :
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 :
Im Gegesatz zu einem vollständigen Bootlog über die serielle Schnittstelle hast du natürlich weniger Infos, aber es ist fast alles da[...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
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
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
...
das windows tool von elinas_of_alba kann man dann zum auswerten nehmen ?
-
- Foren-Moderator
- Beiträge: 297
- Registriert: Montag 11. Oktober 2004, 14:51
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
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.
Es gibt bisher kein win32 tool dafür, müsste bei Interesse jemand bauen.
danach kannst du die kernel option in der .config enablen.
Danach kannst du den kernel neu bauen.
dann die rcS anpassne mit
damit hast du dann einen Teil geschafft.insmod netconsole config=@/-6666@192.168.99.249/
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.
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......einziges tool was fehlen würde wäre ein win32 utility, was ......
Es gibt bisher kein win32 tool dafür, müsste bei Interesse jemand bauen.
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
-
- Foren-Moderator
- Beiträge: 297
- Registriert: Montag 11. Oktober 2004, 14:51
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;
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);
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;
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
Wenn das geht, hast du teil 1 geschafft
Dann änderst du anstelle von config_netconsole=y config_netsonsole=m
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
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:
und weiter unten
mhh meine rcs sieht so aus
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]
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 &
Code: Alles auswählen
/sbin/setconsole2
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]
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
-
- Foren-Moderator
- Beiträge: 297
- Registriert: Montag 11. Oktober 2004, 14:51
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
-
- Foren-Moderator
- Beiträge: 297
- Registriert: Montag 11. Oktober 2004, 14:51
was heisst nicht alles ?mb405 hat geschrieben:ja
er zeigt zwar nicht alles an, warum auch immer, aber es klappt einwandfrei.
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.
-
- Moderator english
- Beiträge: 2458
- Registriert: Donnerstag 20. Dezember 2001, 00:00
@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
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
-
- Foren-Moderator
- Beiträge: 297
- Registriert: Montag 11. Oktober 2004, 14:51
Hmm, 6 Posts drüber hab ich's gepostedPT-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
Die diffs anwenden auf den kernel
oder was meinst du ?
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
-
- Foren-Moderator
- Beiträge: 297
- Registriert: Montag 11. Oktober 2004, 14:51
dann würde ich sagen, daß die socat Geschichte nicht sauber ist.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.
Hast du auch
in der rcS gemacht ?/sbin/socat PTY,link=/dev/ttyP0 UDP:192.168.99.249:6666 &
Ziel-IP und Port auf die gleiche Adresse wie für die netconsole
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
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
...
-
- Foren-Moderator
- Beiträge: 297
- Registriert: Montag 11. Oktober 2004, 14:51
Nabend,
du musst auch der netconsole mitteilen, wohin du loggen willst:
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----------------------------------
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
ich habs wieder reingebastelt
es liegt wohl an der zeile
wenn ich das eingebe
läuft es zumindest.
hab ich wohl ne falsche netconsole.c ??
Code: Alles auswählen
Using /lib/modules/2.4.31-dbox2/kernel/arch/ppc/8xx_io/netconsole.o
insmod: invalid parameter config
Code: Alles auswählen
insmod netconsole config=@/-6666@192.168.123.4/
Code: Alles auswählen
insmod netconsole
hab ich wohl ne falsche netconsole.c ??