검색결과 리스트
Linux에 해당되는 글 3건
- 2010.03.18 hello 디바스 드라이버 46
- 2010.03.03 우분투에서 리눅스 커널소스 다운받아 컴파일하기 860
- 2008.12.02 JAVA 리눅스 IP 주소 알아내기 38
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int __init hello_init(void) {
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static void __exit hello_exit(void) {
printk(KERN_ALERT "Goodbye, world\n");
}
module_init(hello_init);
module_exit(hello_exit);
사실 MODULE_LICENSE 는 옵션이다. 그러나 지정하지 않은 모듈을 적재시 "오염 상태" 가 된다."GPL" , "GPL v2" , "GPL and additional rights" , "Dual BSD/GPL" , "Dual MPL/GPL"
"Proprietary"
KERNELDIR 에는 커널헤더 경로가 들어가기 때문에 위와 같은 명령을 사용하면 헤더의 경로를 가져올 수 있다.KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
obj-m := hello.o
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm *.ko *.o Module.* modules.* *.mod.c
위와 같이 나오면 제대로 컴파일 된 것이고 hello.ko 파일이 생겼을 것이다.root@cranix-desktop:~/work/drivers# make
make -C /lib/modules/2.6.31-20-generic-pae/build M=/root/work/drivers modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.31-20-generic-pae'
CC [M] /root/work/drivers/hello.o
Building modules, stage 2.
MODPOST 1 modules
CC /root/work/drivers/hello.mod.o
LD [M] /root/work/drivers/hello.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.31-20-generic-pae'
위와같이 디바이스 드라이버는 insmod 와 rmmod 로 적재와 삭제를 하고 lsmod 로 리스트를 볼 수 있다.root@cranix-desktop:~/work/drivers# insmod hello.ko
root@cranix-desktop:~/work/drivers# lsmod |grep hello
hello 1052 0
root@cranix-desktop:~/work/drivers# rmmod hello
root@cranix-desktop:~/work/drivers# lsmod |grep hello
root@cranix-desktop:~/work/drivers#
메시지가 쭈욱 나오는데 제일 아래보면 원하던 메시지를 볼 수 있을 것이다.root@cranix-desktop:~/work/drivers# dmesg
...
...
[ 2747.649737] Hello, world[ 2759.753311] Goodbye, world
Lazy 장기 온라인! (108) | 2011.08.18 |
---|---|
subversion branches, trunk, tags 디렉토리 의미 (20) | 2010.02.10 |
ubuntu 터미널 폰트 제대로된거 쓰기 (19) | 2010.02.08 |
유니버설 디자인을 위한 실전 UI(HTML/CSS)개발 가이드 (25) | 2009.12.03 |
미라지 레지셋팅 (3398) | 2009.12.02 |
윈도우에서 JAVA 로 IP 주소 가지고 오는소스는 아래와 같다.
[code]try {
ip = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}[/code]
그러나 이것을 리눅스에서 쓴다면 127.0.0.1 즉 루프백 아이피 주소가 나오게 된다.
어떻게 해야할까?
구글링결과 아래와같은 결론을 얻었다.
[code]try {
boolean isLoopBack = true;
Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
while(en.hasMoreElements()) {
NetworkInterface ni = en.nextElement();
if (ni.isLoopback())
continue;
Enumeration<InetAddress> inetAddresses = ni.getInetAddresses();
while(inetAddresses.hasMoreElements()) {
InetAddress ia = inetAddresses.nextElement();
if (ia.getHostAddress() != null && ia.getHostAddress().indexOf(".") != -1) {
ip = ia.getHostAddress();
isLoopBack = false;
break;
}
}
if (!isLoopBack)
break;
}
} catch (SocketException e1) {
e1.printStackTrace();
}[/code]
NetworkInterface 라는 클래스를 이용하여 각 네트웍 인터페이스를 검색해서 알아내는 방법이다.
어찌되었건 이렇게 하면 윈도우건 리눅스건 돌아간다.
어째 자바스크립트가 된 기분이다.
이것은 자바의 철학인 WORA(Write Once Run Anyware) 를 위배한다.
앞으로 자바가 어떻게 발전할지는 모르겠지만 가장 기본적인 자바 철학은 지켜 주었으면 하는 바램이다.
자바 힙덤프 뜨기 (69) | 2012.12.18 |
---|---|
JNLP 테스트 (36) | 2010.02.14 |
apache 프로젝트의 commons-dbcp 를 이용하여 connection pool 만들기. (42) | 2008.08.15 |
java 에서 xmlrpc 사용하기 (38) | 2008.07.13 |
annotation 주석? (43) | 2006.12.16 |
RECENT COMMENT