기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

HDD는 항상 붙어 있기때문에 /etc/fstab에 설정한 후 그냥 씁니다.  

그러나 USB나 CD-ROM은 삽입할 경우 자동마운트가 되게 해야 할탠데 /etc폴더
아래 /hot-plug/usb를 손보면 되는걸로 알고 있었지만 폴더가 없습니다.

분명 컴파일전 모듈 추가를 했는데도요.

이거 느낌은 package가 다른 방식으로 automount를 하는것 같은데 잘 모르겠네요.

당연히 수동 마운트는 되고요.

여담이지만 2주전엔가 포도밭 그 사나이라는 드라마를 주말에 봤는데 재밌더군요.

그런데 저는 1-2회로 알고 봤던것이 중간회쯤이고 벌써 종영 됬더군요.

내용은 그저 그런데 남자 주인공이 참 구수한 맛이 있는게 참 인상적이더군요.

주인공이 사랑을 고백하는 장면이 있는데 커피를 타오더군요. 제발 아! 뜨거! 라는 대사만은 나오지 마라 하고 생각하던 찰라 주인공의 한마디
"자만 내 코피쫌 마시고! 아! 뜨! 아! 뜨!"
ㅎㅎ

이번 주말에 좀 찾아 봐야 겠습니다.

즐거운 주말들 보내세요.

고현철

2006.09.24 03:44:48
*.204.83.74

hotplug 개념입니다.

2.6 커널에 대해서만 말씀드리면, mass를 삽입하면 usb, scsi, block 세가지 종류의 hotplug 메세지가 발생합니다.

그것은 /sbin/hotplug 란 실행파일을 돌리게 되어 있고, /sbin/hotplug는 /etc/hotplug.d/default/* 파일을 실행시키게 됩니다.

그런 후 /etc/hotplug.d/default/* 파일 중 하나가 /etc/hotplug/* 파일을 참조하면서 왕창 프로세싱한 후 사용자가 지정한 명령을 디바이스의 종류에 따라 실행시키게 됩니다.

제가 embedded해서 해 봤으나....장난아니게 복잡하더군요...^^

제일 마지막 단계서 Fedora core나 다른 패키지 본에서는 사용자가
지정한 명령을 다른 방식으로 동작시킵니다.

/etc/hotplug.d/default/* 를 동작시킬때 hal daemon이란 넘한테
메세지 발생하도록 만든 후 d-bus란 넘을 이용해서 gnome의 해당 데시크탑 메니저로 이벤트를 발생시켜서 자동마운트하도록 만듭니다.

gnome이나 kde 둘 다 해당 hal daemon과 d-bus에 대응해서 hotplug 이벤트 발생시 자동으로 동작시켜주는 daemon 프로그램이 있습니다.

절라 복잡하죠?.......^^

참고로 저는 /sbin/hotplug에서 주로 손을 봅니다....ㅎㅎ

오주열

2006.09.25 18:44:05
*.96.197.88

저도 궁금했던 내용이었는데 도움이 되겠습니다. 감사합니다.

박영학

2006.09.25 20:13:17
*.45.116.126

아네~~ 주말 내내 감기로 앓고 있다고 오늘 출근해서야 봤네요.

그렇게 etc/ 나 /sbin 아래에 hotplug에 대한 폴더나 파일이 있어야 접근을 해볼텐데 이놈의 패키지는 찾아 볼수가 없네요. 물론 컴파일전에 정상적으로 config을 해줬는데도요...
(제가 요즘 가지고 노는 놈이 8620으로 떠논 보드라 대부분 이 이야기입니다.
커널은 2.4.20인가? 이고요 )
일단 머리속에 먼저 정확히 문제 파학이 되어야 필요한 로그라도 올리면서 질문할텐데 일단 일반적인 방식에 대해 질문했습니다.

우선 좀더 검토를 해보고 어떤구조로 되어있는지 다시 한번 올리겠습니다.

박정태

2006.09.25 20:29:35
*.7.210.6

예전에 무식한 방법이긴 하지만 2.4에서 user mode helper를 이용해서
오토마운트를 구현했던 적이 있습니다. 시간이 급해서 그렇게 할 수 밖에 없었는데요.
작동하는데 큰 무리는 없었던 것 같습니다.
probe, disconnect에서 헬퍼를 호출해서 마운트, 언마운트를 실행하는 무식한
방법입니다.

-bid-

박영학

2006.09.26 00:27:36
*.45.116.126

TANGO10 boot loader v0.12.19 for dtv/unnamed board
(C) Copyright 2002-2005 Sigma Designs, Inc

NOTE: this boot loader is designed to boot kernels made with the
2.4.xx releases of the Sigma Designs ARMutils package

Built at Sep 16 2006 11:08:30
Loaded to 0x90060000
Found boot configuration
Booted from parallel flash.
CPU freq.: 166 MHz
DRAM size is 64MB (64MB/0MB)
DRAM0 Params (0xe63001f8/0x00098688)
ROMFS found at 0x46030000, Volume name = mambo
File linux.bin.gz found
Unzipping image from 0x460D1B80 to 0x90090000, size = 796011
Inptr = 0x00000014(20)
Inflating....
Outcnt = 0x001b12cc(1774284)
Final Inptr = 0x000c2563(796003)
Original CRC = 0xdebad70b
Computed CRC = 0xdebad70b
Boot kernel at 0x90090000 with ROMFS at 0x46030000
Linux version 2.4.22-em86xx-uc0-sigma (root@STARPATH) (gcc version 2.95.3 20010315 (release)) #17 2006. 09. 25. (월) 13:33:09 KST
Found bootloader memory map at 0x10000fc0.
Processor: ARM pt110 revision 0
Architecture: EM86XX
Tango10 Rev C (kernel supports Rev C)
Board name is dtv
On node 0 totalpages: 8192
Free page pool initialized (size=512)
zone(0): 8192 pages.
Warning: wrong zone alignment (0x90080000, 0x0000000c, 0x00001000)
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: root=/dev/blkmem/0
Console: colour dummy device 80x30
serial_em86xx: setup_console @ 38400
Calibrating delay loop... 73.93 BogoMIPS
Memory: 32MB = 32MB total
Memory: 30428KB available (1571K code, 262K data, 72K init)
Dentry cache hash table entries: 4096 (order: 3, 32768 bytes)
Inode cache hash table entries: 2048 (order: 2, 16384 bytes)
Mount cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer cache hash table entries: 1024 (order: 0, 4096 bytes)
Page-cache hash table entries: 8192 (order: 3, 32768 bytes)
POSIX conformance testing by UNIFIX
PCI: bus0: Fast back to back transfers disabled
PCI: Configured EM86XX as a PCI slave with 128MB PCI memory
PCI: Each Region size is 16384KB
PCI: Reserved memory from 0x10080000 to 0x12080000 for DMA and mapped to 0x12000000
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
skbmem: allocated 0x200000 from 0x91a80000-0x91c80000
Initializing RT netlink socket
EM86XX: Setting UART1 as partial GPIO.
Starting kswapd
devfs: v1.12c (20020818) Richard Gooch ([email protected])
devfs: boot_options: 0x1
pty: 256 Unix98 ptys configured
ir: driver loaded (wait_period = 100, buffer_size = 2)
Relocate blkmem to address 46030000
Blkmem copyright 1998,1999 D. Jeff Dionne
Blkmem copyright 1998 Kenneth Albanowski
Blkmem 1 disk images:
0: 46030000-461D2FFF [VIRTUAL 46030000-461D2FFF] (RO)
Uniform Multi-Platform E-IDE driver Revision: 7.00beta4-2.4
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
EM86XX Bus Mastering IDE activated as ide0.
Bounce buffer starts at 0x11e50000
hda: DVSKOREADVS-LDR DSV-600A 041220A0, ATAPI CD/DVD-ROM drive
hdb: HITACHI_DK23AA-12, ATA DISK drive
IDE: Set drive 0 to Multi-word DMA mode 2
IDE: DMA enabled for ATAPI CDROM hda
IDE: Set drive 1 to Ultra DMA mode 2
IDE: DMA enabled for ATA DISK hdb
ide0 at 0x223c0-0x223c7,0x22398 on irq 18
hdb: attached ide-disk driver.
hdb: host protected area => 1
hdb: 23579136 sectors (12073 MB) w/512KiB Cache, CHS=23392/16/63
hda: attached ide-cdrom driver.
hda: ATAPI 32X DVD-ROM drive, 512kB Cache
Uniform CD-ROM driver Revision: 3.12
Partition check:
/dev/ide/host0/bus0/target1/lun0: [PTBL] [1467/255/63] p1
SCSI subsystem driver Revision: 1.00
kmod: failed to exec /sbin/modprobe -s -k scsi_hostadapter, errno = 2
Probing EM86XX Flash Memory
Amd/Fujitsu Extended Query Table v1.1 at 0x0040
number of CFI chips: 1
Using word write method
cfi_cmdset_0002: Disabling fast programming due to code brokenness.
Creating 4 MTD partitions on "EM86XX mapped flash":
0x00030000-0x007f0000 : "RootFS"
mtd: partition "RootFS" extends beyond the end of device "EM86XX mapped flash" -- size truncated to 0x3d0000
0x007f0000-0x00800000 : "User"
mtd: partition "User" is out of reach -- disabled
Division by zero in kernel.
Function entered at [<900a70c8>] from [<901f70b8>]
Function entered at [<90175500>] from [<9009af48>]
Function entered at [<9009ae78>] from [<900906d0>]
Function entered at [<900906b4>] from [<90090718>]
r5 = 9022C000 r4 = 00000000
Function entered at [<900906e8>] from [<900a204c>]
Function entered at [<900a203c>] from [<900a3c3c>]
r7 = 90241770 r6 = 90241774 r5 = 9022C000 r4 = 00000000
Division by zero in kernel.
Function entered at [<900a70c8>] from [<901f70b8>]
Function entered at [<90175500>] from [<9009af48>]
Function entered at [<9009ae78>] from [<900906d0>]
Function entered at [<900906b4>] from [<90090718>]
r5 = 9022C000 r4 = 00000000
Function entered at [<900906e8>] from [<900a204c>]
Function entered at [<900a203c>] from [<900a3c3c>]
r7 = 90241770 r6 = 90241774 r5 = 9022C000 r4 = 00000000
0x00000000-0x00010000 : "BootROM1"
0x00010000-0x00030000 : "BootROM2"
usb.c: registered new driver hub
ehci_hcd 00:02.2: PCI device 1106:3104
ehci_hcd 00:02.2: irq 15, pci mem 60120100
usb.c: new USB bus registered, assigned bus number 1
ehci_hcd 00:02.2: USB 2.0 enabled, EHCI 1.00, driver 2003-Dec-29/2.4
hub.c: USB hub found
hub.c: 4 ports detected
host/usb-uhci.c: $Revision: 1.275 $ time 13:33:59 Sep 25 2006
host/usb-uhci.c: High bandwidth mode enabled
host/usb-uhci.c: USB UHCI at I/O 0x58000400, IRQ 15
host/usb-uhci.c: Detected 2 ports
usb.c: new USB bus registered, assigned bus number 2
hub.c: USB hub found
hub.c: 2 ports detected
host/usb-uhci.c: USB UHCI at I/O 0x58000420, IRQ 15
host/usb-uhci.c: Detected 2 ports
usb.c: new USB bus registered, assigned bus number 3
hub.c: USB hub found
hub.c: 2 ports detected
host/usb-uhci.c: v1.275:USB Universal Host Controller Interface driver
Initializing USB Mass Storage driver...
usb.c: registered new driver usb-storage
USB Mass Storage support registered.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 2048 bind 2048)
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
FAT: bogus logical sector size 21200
UMSDOS: msdos_read_super failed, mount aborted.
FAT: bogus logical sector size 21200
FAT: bogus logical sector size 21200
VFS: Mounted root (romfs filesystem) readonly.
Mounted devfs on /dev
Freeing init memory: 72K
Initializing ramdisk... ok
Initializing random number generator... done.
Using /lib/modules/2.4.22-em86xx-uc0-sigma/kernel/drivers/net/mii.o
Using /lib/modules/2.4.22-em86xx-uc0-sigma/kernel/lib/crc32.o
Using /lib/modules/2.4.22-em86xx-uc0-sigma/kernel/drivers/net/8139too.o
8139too Fast Ethernet driver 0.9.27
eth0: RealTek RTL8139 at 0x58000000, ff:ff:ff:ff:ff:ff, IRQ 14
eth0: link up, 10Mbps, half-duplex, lpa 0x0000
route: SIOC[ADD|DEL]RT: File exists
eth0: link up, 10Mbps, half-duplex, lpa 0x0000
mount: 192.16nfs warning: mount version newer than kernel
8.10.20:NFS: mount program didn't pass remote address!
/dtv8620 failed, reason given by server: No such file or directory
mount: nfsmount failed: Bad file descriptor
mount: Mounting 192.168.10.20:/dtv8620 on /mnt/NETWORK failed: Invalid argument
mount: Mounting /dev/discs/disc1/part1 on /mnt/USB failed: No such file or directory
mount: /dev/cdroms/cdrom0 is write-protected, mounting read-only
insmod: llad.o: no module by that name found
insmod: em8xxx.o: no module by that name found
uclibc[/]#
uclibc[/]#
uclibc[/]#
uclibc[/]# hub.c: new USB device 00:02.0-1, assigned address 2 <== insert usb
scsi0 : SCSI emulation for USB Mass Storage devices
Vendor: Sitec - Model: DataTank Rev: 1.00
Type: Direct-Access ANSI SCSI revision: 02
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
SCSI device sda: 260448 512-byte hdwr sectors (133 MB)
sda: Write Protect is off
/dev/scsi/host0/bus0/target0/lun0: p1

uclibc[/]# usb.c: USB disconnect on device 00:02.0-1 address 2 <== disconnect usb

uclibc[/]# ls /etc
TZ hosts issue random-seed
armutils_version init.d mtab resolv.conf
fstab inittab network sashrc
fstab~ inittab~ passwd securetty
group inputrc profile services
hostname ir.conf protocols shadow
uclibc[/]# ls /sbin/
freeramdisk ifconfig klogd modprobe rmmod udhcpc
halt init losetup poweroff route
hdparm insmod lsmod reboot syslogd
uclibc[/]# ls /bin/
busybox dmesg init.sh more rm umount
cat echo ir_control mount rmdir uname
chgrp egrep iruser msh sed usleep
chmod false kill mv sh vi
chown fgrep ln netstat sleep zcat
cp grep login pidof sync
date gunzip ls ping tar
dd gzip mkdir ps touch
df hostname mknod pwd true
uclibc[/]# ls
bin init.sh lib proc usr
dev init.sh~ linux.bin.gz root var
etc init1.sh mnt sbin
home init1.sh~ opt tmp
uclibc[/]# ls proc
1 81 execdomains kmsg mtd sys
2 88 fb ksyms net sysvipc
3 9 filesystems loadavg partitions tty
4 bus fs locks pci uptime
5 cmdline ide mem_map scsi version
6 cpuinfo interrupts meminfo self
74 devices iomem misc slabinfo
8 dma ioports modules stat
80 driver kcore mounts swaps
uclibc[/]#


보시면 이벤트는 발생하나hotplug 관련 파일이나 폴더를 찾을 수가 없습니다.

static void *hub_probe(struct usb_device *dev, unsigned int i,
const struct usb_device_id *id)
{
struct usb_interface_descriptor *interface;
struct usb_endpoint_descriptor *endpoint;
struct usb_hub *hub;
unsigned long flags;

interface = &dev->actconfig->interface[i].altsetting[0];

/* Some hubs have a subclass of 1, which AFAICT according to the */
/* specs is not defined, but it works */
if ((interface->bInterfaceSubClass != 0) &&
(interface->bInterfaceSubClass != 1)) {
err("invalid subclass (%d) for USB hub device #%d",
interface->bInterfaceSubClass, dev->devnum);
return NULL;
}

/* Multiple endpoints? What kind of mutant ninja-hub is this? */
if (interface->bNumEndpoints != 1) {
err("invalid bNumEndpoints (%d) for USB hub device #%d",
interface->bNumEndpoints, dev->devnum);
return NULL;
}

endpoint = &interface->endpoint[0];

/* Output endpoint? Curiousier and curiousier.. */
if (!(endpoint->bEndpointAddress & USB_DIR_IN)) {
err("Device #%d is hub class, but has output endpoint?",
dev->devnum);
return NULL;
}

/* If it's not an interrupt endpoint, we'd better punt! */
if ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) != USB_ENDPOINT_XFER_INT) {
err("Device #%d is hub class, but has endpoint other than interrupt?",
dev->devnum);
return NULL;
}

/* We found a hub */
info("USB hub found");

hub = kmalloc(sizeof(*hub), GFP_KERNEL);
if (!hub) {
err("couldn't kmalloc hub struct");
return NULL;
}

memset(hub, 0, sizeof(*hub));

INIT_LIST_HEAD(&hub->event_list);
hub->dev = dev;
init_MUTEX(&hub->khubd_sem);

/* Record the new hub's existence */
spin_lock_irqsave(&hub_event_lock, flags);
INIT_LIST_HEAD(&hub->hub_list);
list_add(&hub->hub_list, &hub_list);
spin_unlock_irqrestore(&hub_event_lock, flags);

if (usb_hub_configure(hub, endpoint) >= 0)
return hub;

err("hub configuration failed for device #%d", dev->devnum);

/* free hub, but first clean up its list. */
spin_lock_irqsave(&hub_event_lock, flags);

/* Delete it and then reset it */
list_del(&hub->event_list);
INIT_LIST_HEAD(&hub->event_list);
list_del(&hub->hub_list);
INIT_LIST_HEAD(&hub->hub_list);

spin_unlock_irqrestore(&hub_event_lock, flags);

kfree(hub);

return NULL;
}

static void hub_disconnect(struct usb_device *dev, void *ptr)
{
struct usb_hub *hub = (struct usb_hub *)ptr;
unsigned long flags;

spin_lock_irqsave(&hub_event_lock, flags);

/* Delete it and then reset it */
list_del(&hub->event_list);
INIT_LIST_HEAD(&hub->event_list);
list_del(&hub->hub_list);
INIT_LIST_HEAD(&hub->hub_list);

spin_unlock_irqrestore(&hub_event_lock, flags);

down(&hub->khubd_sem); /* Wait for khubd to leave this hub alone. */
up(&hub->khubd_sem);

if (hub->urb) {
usb_unlink_urb(hub->urb);
usb_free_urb(hub->urb);
hub->urb = NULL;
}

if (hub->descriptor) {
kfree(hub->descriptor);
hub->descriptor = NULL;
}

/* Free the memory */
kfree(hub);
}

위 내용은 hub.c에서 probe와 disconnect 함수입니다.

user mode helper라는걸 공부해서 구현을 해야 할지 아님 제가 놓치고 있는 포인트가 있는건지 잘 감이 안오네요. 잘하시는분들은 딱보면 아실것도 같은데...

고현철

2006.09.26 04:35:29
*.117.46.252

user mode helper가 /sbin/hotplug를 호출하는게 아닌가요?.....

저는 그렇게 알고 있는데...^^, 시간나면 함 봐야하겠네요.

박정태

2006.09.26 22:45:44
*.7.210.6

hotplug는 어떻게 구동되는지 잘 모르겠네요~~ ^^;
제가 썻던 방법을 자세히 알려드리면,

drivers/usb/storage/usb.c에서
storage_probe함수에 다음과 같이 추가하고
...
int ret;
char *argv[4];
char *envp[] ={ "HOME=/",
"PATH=/sbin:/usr/sbin:/bin:/usr/bin",
NULL };
...

함수 젤 마지막에
argv[0] = "/bin/automnt";
argv[1] = "probe";
sprintf(argv[2], "host%d", ss->host_no);
argv[3] = NULL;

/*
printk(KERN_DEBUG __FUNCTION__ ": n Calling automnt as: ");
for ( i = 0 ; argv[i] != NULL; i++)
printk("%s ",argv[i]);
printk("n Environment ");
for ( i = 0 ; envp[i] != NULL ; i++)
printk("%s ", envp[i]);
printk("n");
*/

ret = call_usermodehelper(argv[0], argv, envp);
를 추가했습니다.

storage_disconnect 함수도 마찬가지이고요.

automnt는 다음과 같습니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>

#define USB_MOUNTED 0x01
#define USB_UMOUNTED 0x02
#define MMC_MOUNTED 0x04
#define MMC_UMOUNTED 0x08

void send_sig_to_rec(int pid, int value)
{
union sigval sv;

if (pid < 0)
return;

sv.sival_int = value;

sigqueue(pid, SIGRTMIN, sv);
}

int main(int argc, char **argv)
{
char mnt_buf[512];
int pidfile, rec_pid = -1;
int retval = 256;

if (argc == 1)
{
if (access("/dev/scsi/host0/bus0/target0/lun0/part1", F_OK) == 0)
{
sprintf(mnt_buf, "mount -t vfat -o rw /dev/scsi/host0/bus0/target0/lun0/part1 /mnt/usb");
retval = system(mnt_buf);
if (!retval)
{
return retval;
}

retval = system(mnt_buf);
if (!retval)
{
return retval;
}
}

if (access("/dev/scsi/host0/bus0/target0/lun0/disc", F_OK) == 0)
{
sprintf(mnt_buf, "mount -t vfat -o rw /dev/scsi/host0/bus0/target0/lun0/disc /mnt/usb");
retval = system(mnt_buf);
if (!retval)
{
return retval;
}
retval = system(mnt_buf);
if (!retval)
{
return retval;
}
}

if (access("/dev/mmc/disc0/part1", F_OK) == 0)
{

sprintf(mnt_buf, "mount -t vfat -o rw /dev/mmc/disc0/part1 /mnt/mmc");
retval = system(mnt_buf);
if (!retval)
{
return retval;
}
}

return retval;
}

if ((pidfile = open("/etc/piddata", O_RDONLY, S_IREAD)) == -1)
{
printf( "Cannot Open piddata file !n");
}

else
{
memset(mnt_buf, 0, 512);
read(pidfile, mnt_buf, 8);
rec_pid = atoi(mnt_buf);
close(pidfile);
}

if (!strcasecmp(argv[1], "probe"))
{
sprintf(mnt_buf, "mount -t vfat -o rw /dev/scsi/%s/bus0/target0/lun0/part1 /mnt/usb", argv[2]);

retval = system(mnt_buf);
if (!retval)
{
send_sig_to_rec(rec_pid, USB_MOUNTED);
return retval;
}

retval = system(mnt_buf);
if (!retval)
{
send_sig_to_rec(rec_pid, USB_MOUNTED);
return retval;
}

sprintf(mnt_buf, "mount -t vfat -o rw /dev/scsi/%s/bus0/target0/lun0/disc /mnt/usb", argv[2]);

retval = system(mnt_buf);
if (!retval)
{
send_sig_to_rec(rec_pid, USB_MOUNTED);
return retval;
}

retval = system(mnt_buf);
if (!retval)
{
send_sig_to_rec(rec_pid, USB_MOUNTED);
return retval;
}

return retval;

}

else if (!strcasecmp(argv[1], "disconnect"))
{
retval = system("umount -f /mnt/usb");

send_sig_to_rec(rec_pid, USB_UMOUNTED);

return retval;
}

else if (!strcasecmp(argv[1], "add"))
{
sprintf(mnt_buf, "mount -t vfat -o rw /dev/mmc/disc0/part1 /mnt/mmc");

retval = system(mnt_buf);

send_sig_to_rec(rec_pid, MMC_MOUNTED);

return retval;

}

else if (!strcasecmp(argv[1], "remove"))
{
retval = system("umount -f /mnt/mmc");

send_sig_to_rec(rec_pid, MMC_UMOUNTED);

return retval;

}

return -1;
}

무식한 방법이지만 도움이 되시길.

고현철

2006.09.26 23:09:22
*.117.46.252

^^,

무식한 방법이라기 보다는....다른게 쓴 정답이네요....ㅎㅎ

hotplug가 같은 방법으로 사용할 겁니다. 대신 /sbin/hotplug를 호출할 듯...
오래되서 가물하지만요....

박영학

2006.09.27 18:10:05
*.45.116.126

먼가 해결점을 찾은것 같습니다.

실험해보고 결과 알려 드리겠습니다.

감사합니다.

박영학

2006.09.30 00:23:07
*.111.218.49

말씀하신 방법으로 해결 되었습니다.

이벤트가 발생하는 쪽 소스에 system() 함수를 이용해 해결 하였습니다.

제가 이번주 내내 전시회에 나와 있어서 직접 해결하진 못했지만 담주는 또 추석이고 아마도 로그 올리기가 힘들것 같습니다.


고현철님 박정태님 감사합니다.

고현철

2006.09.30 02:43:24
*.117.46.252

^^, 괜찮습니다.

박정태님 답글만 봐도 다른 사람들이 알 수 있을겁니다.
List of Articles
번호 제목 글쓴이 날짜 조회 수sort
6348 binder에서 BnInterface나 BpXXX이렇게 붙는데요 Bn과 Bp는 어... [1] BellFive 2010-07-28 10800
6347 LCD 디스플레이 관련 질문입니다. file [2] 조현호 2011-08-31 10458
6346 가상머신(virtualbox, vmware) 드라이버 설정 환경 문의 입니다. [2] pedor11 2014-01-03 9804
6345 [질문/완료] 무선랜 붙여서 핑 날렸는데,, 문제 발생.. [5] 장병남 2008-09-23 9650
6344 Q&A 게시판 사용시 주의사항. 고현철 2006-04-05 9516
6343 [완료] Crosstool 0.43으로 toolchain 제작 시도중에. [2] 김성재 2008-12-03 9379
6342 Arndale + MT-6620 [2] nsys 2012-12-08 9355
6341 MCU / AP [6] 김민욱 2018-08-27 9036
6340 NAK bailout생기면서 I2C 통신 fail이 나네요. 훌러덩 2012-04-10 8975
6339 [질문] x86(AMD geode LX800) 보드는 구입이 가능한가요?[완료] [12] 김성주 2007-03-15 8958
6338 kernel source중 gpio와 관련된 질문입니다. [1] 소노공 2010-12-10 8086
» USB storage 마운트 어떻게들 하시나요. <== [완료] [11] 박영학 2006-09-23 8044
6336 [s3c2440] FTDI USB Serial converter사용하고 싶은데요??[완료... [8] 김창연 2006-10-24 7849
6335 Android 포팅 방법에 대한 질문 [11] 전병환 2009-04-09 7746
6334 안드로이드폰에서 통화중 녹음 [3] 최강산 2010-07-30 7421
6333 안드로이드 커널 소스 다운 받는 방법.. [3] 이성호 2009-03-12 7309
6332 6410을 이용해서 영상 Encoder/Decoder를 구현하려고 합니다. [9] 이종우 2009-03-04 7281
6331 NDK로 native C application 컴파일하기 [2] [春] 2010-01-15 7151
6330 임베디드 보드의 top 명려에 대한 질문입니다.(우분투top 비교, 프로... [9] pedor11 2014-03-05 7024
6329 안드로이드에서 SD카드 인식이 않되네요. [4] 유태경 2009-12-06 7004

사용자 로그인