개소리 왈왈2010. 1. 9. 15:50
RSS에 아이폰 어플 소개만 잔뜩 올라와서 읽을게 없다 ㅠ.ㅠ
하나 사야하나? ㄱ-





핸드폰 기능을 제외한 아이폰의 기능을
아이팟 다음세대로 출시하면 하나 사고 싶긴한데 -ㅁ-!

'개소리 왈왈' 카테고리의 다른 글

일하기 싫어 뻘짓  (0) 2010.01.13
암과 우주, 생명체  (2) 2010.01.09
겨울 이상 한파와 가이아  (2) 2010.01.05
SixSense - 증강현실  (6) 2010.01.04
올 한해도 후회하는 삶을 살도록 노력합시다!  (7) 2010.01.01
Posted by 구차니
눈길에서 자전거 타면
일단 스릴이 넘친다!

뒷바퀴가 드리프~~~트



근데... 내 자전거는 앞뒤 브레이크가 바뀌어있다.
즉, 오른쪽이 뒷브레이크고 왼쪽이 앞브레이크다.

근데... 오늘 자전거 타면서 까먹었.. OTL
덕분에 자전거 타다가 좌우를 잘못 잡아서 한바퀴 헤까닥 할뻔했다.
그래도 역시 겨울에는 눈길에 자전거? ㅋㅋㅋ




아무튼 자전거 타고 강동구립 송파도서관을 갔다왔다.
천호역에서 있는건 강동구립 해공도서관용 대여/반납이라고 한다.
흐음.. 토요일마다 가서 빌리는것도 귀찮은데 해공으로 바꿀가 -ㅁ-

'개소리 왈왈 > 자전거' 카테고리의 다른 글

한강공원 - 잠실  (13) 2010.04.08
자전거 여행(?)  (7) 2010.03.22
한강공원 - 자전거 가격과 경험의 권력화?  (2) 2009.10.19
돈쓸일은 혼자오지 않는다.  (12) 2009.07.28
아놔 이런 십슬레이션!  (6) 2009.07.26
Posted by 구차니
Linux2010. 1. 8. 16:26
# mount -t ntfs-3g

머.. 이런식으로 실행하면 자동으로 mount.ntfs-3g 라는 파일을 찾아서 실행을 한다.
처음에는 오 졸라 신기해!!! 하면서 뻘짓으로 ..

make 과정중에 나온 intall-exec-hook 인줄 알고 파고 들었다가 웬걸 ㄱ-
아무튼 install-exec-hook은 설치후 trigger 식으로 실행해주는 루틴을 의미할 뿐,
execution hook 이랑은 연관이 없다. (젠장 된장 미네랄!)
[링크 : http://wiki.kldp.org/wiki.php/DocbookSgml/Autotools-KLDP]

아무튼, linux kernel utils 를 검색해서 mount.c 를 열어보니 busybox와는 다른 확연한 차이가 있었다.
일단 exec() 패밀리와 fork()를 사용하는 루틴의 존재유무

util-linux-2.12r/mount/mount.c

static int
check_special_mountprog(const char *spec, const char *node, const char *type,
			int flags, char *extra_opts, int *status) {
  char mountprog[120];
  struct stat statbuf;
  int res;

  if (!external_allowed)
      return 0;

  if (type && strlen(type) < 100) {
       sprintf(mountprog, "/sbin/mount.%s", type);
       if (stat(mountprog, &statbuf) == 0) {
	    res = fork();
	    if (res == 0) {
		 const char *oo, *mountargs[10];
		 int i = 0;

		 setuid(getuid());
		 setgid(getgid());
		 oo = fix_opts_string (flags, extra_opts, NULL);
		 mountargs[i++] = mountprog;
		 mountargs[i++] = spec;
		 mountargs[i++] = node;
		 if (nomtab)
		      mountargs[i++] = "-n";
		 if (verbose)
		      mountargs[i++] = "-v";
		 if (oo && *oo) {
		      mountargs[i++] = "-o";
		      mountargs[i++] = oo;
		 }
		 mountargs[i] = NULL;
		 execv(mountprog, (char **) mountargs);
		 exit(1);	/* exec failed */
	    } else if (res != -1) {
		 int st;
		 wait(&st);
		 *status = (WIFEXITED(st) ? WEXITSTATUS(st) : EX_SYSERR);
		 return 1;
	    } else {
	    	 int errsv = errno;
		 error(_("mount: cannot fork: %s"), strerror(errsv));
	    }
       }
  }
  return 0;
}

위에 소스에서 보면

sprintf(mountprog, "/sbin/mount.%s", type);
res = fork();
execv(mountprog, (char **) mountargs);

mount -t ntfs 는 mount.ntfs 로
mount -t cifs 는 mount.cifs 로

-t type 으로 받은 인자를 이용하여 실행을 넘겨준다.



결론 : busybox에서는 mount 소스가 많이 간략화 되어있으므로
         표준 mount 파일에서 지원하는 mount.type 실행치환 기능을 지원하지 않는다.

[링크 : ftp://ftp.kernel.org/pub/linux/utils/util-linux/] 리눅스용 mount.c
[링크 : http://www.koders.com/c/fid840A8124E3B838F1EC7B690C35A7A6F9BF10277B.aspx] busybox용 mount.c

'Linux' 카테고리의 다른 글

linux에 연결된 HDD의 IO 상태보기  (0) 2010.01.11
fork-exec 종료시 리턴값  (0) 2010.01.11
ntfs-3g 크로스 컴파일 하기 (ntfs-3g cross compile)  (0) 2010.01.07
FUSE 넌 머냐?  (0) 2010.01.07
ntfs-3g at Tuxera  (0) 2010.01.06
Posted by 구차니
이럴때는 서버관리자 관한으로
회사를 쉬게하고 한 3일 동안 서버 재설치 및 파일 정리만 하고 싶다.




실은.. 일하기가 싫어 -ㅁ-
서버는 맛이 갈뿐이고
쓸데없이 서버만 세대고
합치면 두개면 충분할꺼 같은데 ㅠ.ㅠ

'개소리 왈왈 > 직딩의 비애' 카테고리의 다른 글

출근일기 - 20100113  (2) 2010.01.13
퇴근일기 - 20100111  (4) 2010.01.12
폭설 주의보인데.. 출근해야해?  (8) 2010.01.04
새해 복많이 받으세요!  (4) 2010.01.01
퇴근일기 - 20091222  (0) 2009.12.23
Posted by 구차니
Microsoft2010. 1. 7. 15:12
올리 디버거로 추적하는 글 보면.. 정말 토나온다 라고 할정도의...
어마어마한 배배배 꼬아놓은 코드로 바꾸어준다.
[링크 : http://window31.com/48]

themida와 armadillo
무서운 녀석이군..

[링크 : http://www.oreans.com/themida.php]
[링크 : http://www.siliconrealms.com/software-passport-armadillo.html]


2011.01.05 추가

'Microsoft' 카테고리의 다른 글

lsass.exe 바이러스!?!??!?!  (2) 2011.05.24
ISA Server  (0) 2011.05.23
windows embeded  (4) 2010.10.06
Windows server 2008 R2 + Hyper-V  (0) 2010.09.24
무료기술서적 - Inside C#  (0) 2009.05.17
Posted by 구차니
Linux2010. 1. 7. 14:23
이녀석.. 미운 4살도 아닌데 크로스 컴파일 대책이 제대로 안되어 있는지 한큐에 안된다 ㄱ-

i686 linux에서는 참 쉽게 한다.

./configure
make
make install

[링크 : http://www.tuxera.com/community/ntfs-3g-download/]

세줄 끝.. 참 쉽죠잉~



그.런.데 크로스컴파일은 악몽의 시작이었다.
sh4-linux 에서 크로스컴파일은 산넘어 산이었는데..

crash 1.
# export CC=gsh4-linux-gcc
# ./configure --host-=i686 --target=sh4-linux
..
checking if libtool supports shared libraries... no
checking whether to build shared libraries... no
..
# make
...
Making install in libntfs-3g
test -z "/usr/local/lib" || /bin/mkdir -p "/home/morpheuz/st7109/target/usr/local/lib"
 /bin/sh ../libtool   --mode=install /usr/bin/install -c  'libntfs-3g.la' '/home/morpheuz/st7109/target/usr/local/lib/libntfs-3g.la'
/usr/bin/install -c .libs/libntfs-3g.lai /home/morpheuz/st7109/target/usr/local/lib/libntfs-3g.la
/usr/bin/install -c .libs/libntfs-3g.a /home/morpheuz/st7109/target/usr/local/lib/libntfs-3g.a
chmod 644 /home/morpheuz/st7109/target/usr/local/lib/libntfs-3g.a
ranlib /home/morpheuz/st7109/target/usr/local/lib/libntfs-3g.a
libtool: install: warning: remember to run `libtool --finish /usr/local/lib'
make  install-exec-hook
test -z "/lib" || /bin/mkdir -p "/home/morpheuz/st7109/target/lib"
if [ ! "/lib" -ef "/usr/local/lib" ]; then \
/bin/mv -f "/home/morpheuz/st7109/target//usr/local/lib"/libntfs-3g.so* "/home/morpheuz/st7109/target//lib";  \
fi
/bin/mv: cannot stat `/home/morpheuz/st7109/target//usr/local/lib/libntfs-3g.so*': No such file or directory
make[3]: *** [install-exec-hook] Error 1
make[2]: *** [install-exec-am] Error 2
make[1]: *** [install-am] Error 2
make: *** [install-recursive] Error 1

머.. 간단해 보이지만 대책이 안선다 ㄱ-
일단은 so 파일도 생성하지 못하면서, so 파일을 옮길려고 하면서 죽는다..
미네랄!

아무튼 해결책은 아래와 같다.

Step 1. 혹시 모르니 liunx kernel의 FUSE 지원여부를 확인한다.
Step 2. 환경설정
# unset CC
# ./configure

# vi Makefile
# vi src/Makefile
# vi libntfs-3g/Makefile
# vi libfuse-lite/Makefile

에서
AR = ar
CC = gcc
CPP = gcc -E
CXX = g++
CXXCPP = g++ -E
ac_ct_CC = gcc
ac_ct_CXX = g++
를 찾아 sh4-linux- 접두를 붙여준다.

# vi libtool
에서
AR="ar"
LTCC="gcc"
CC="gcc"
OBJDUMP="objdump"
AS="as"
를 찾아 sh4-linux- 접두를 붙여준다.

이렇게 수정후에는 마음 편하게

# make

만약 make 시에 secaudio.c 에러가 발생하면
<attr/xattr.h> 를 <sys/xattr.h>로 수정한다.

# vi src/secaudit.c
 261 #ifdef HAVE_SETXATTR
 262 #include <sys/xattr.h>
 263 #else
 264 #warning "The extended attribute package is not available"
 265 #endif /* HAVE_SETXATTR */

아무래도 target 경로가 다를테니 DESTDIR을 넣고 목적지를 정해준다.

# make DESTDIR={target path} install

설치후 생성되는 파일목록
/sbin/mount.ntfs-3g -> /bin/ntfs-3g
/bin/ntfs-3g
/usr/local/bin/ntfs-3g.probe
/usr/local/bin/ntfs-3g.secaudit
/usr/local/bin/ntfs-3g.usermap

/lib/libntfs-3g.so -> libntfs-3g.so.71.0.0
/lib/libntfs-3g.so.71 -> libntfs-3g.so.71.0.0
/lib/libntfs-3g.so.71.0.0

/usr/local/share/man/man8/mount.ntfs-3g.8 -> ntfs-3g.8
/usr/local/share/man/man8/ntfs-3g.8
/usr/local/share/man/man8/ntfs-3g.probe.8
/usr/local/share/man/man8/ntfs-3g.secaudit.8
/usr/local/share/man/man8/ntfs-3g.usermap.8

/usr/local/lib/libntfs-3g.a
/usr/local/lib/libntfs-3g.la
/usr/local/lib/libntfs-3g.so -> /lib/libntfs-3g.so


실행결과
# mount -t ntfs-3g /dev/sda1 /root/sda1
mount: mounting /dev/sda1 on /root/sda1 failed: No such device

# ntfs-3g /dev/sda1 /root/sda1
WARNING: Deficient Linux kernel detected. Some driver features are
         not available (swap file on NTFS, boot from NTFS by LILO), and
         unmount is not safe unless it's made sure the ntfs-3g process
         naturally terminates after calling 'umount'. If you wish this
         message to disappear then you should upgrade to at least kernel
         version 2.6.20, or request help from your distribution to fix
         the kernel problem. The below web page has more information:
         http://ntfs-3g.org/support.html#fuse26

# mount
rootfs on / type rootfs (rw)
/dev/root on / type nfs (rw,noatime,vers=2,rsize=4096,wsize=4096,hard,nolock,proto=tcp,timeo=600,retrans=2,addr=192.168.10.10)
proc on /proc type proc (rw)
usbfs on /proc/bus/usb type usbfs (rw)
sysfs on /sys type sysfs (rw)
/dev/sda1 on /root/sda1 type fuse (rw,user_id=0,group_id=0,allow_other)

'Linux' 카테고리의 다른 글

fork-exec 종료시 리턴값  (0) 2010.01.11
mount.cifs mount.ntfs 등 자동연결의 비밀(?)  (0) 2010.01.08
FUSE 넌 머냐?  (0) 2010.01.07
ntfs-3g at Tuxera  (0) 2010.01.06
웹캠 VLC에서 테스트(Ubuntu 9.10)  (0) 2009.12.29
Posted by 구차니
Linux2010. 1. 7. 14:07

허전해서 붙이긴 했지만. 안드로메다 언어라 이해는 못하고.. (먼산)
이른대로 Filesystem을 Userspace에서 구현을 한다는 것이다.

일단, ntfs-3g 라는 ntfs 드라이버가 이 녀석을 사용하고,
그로 인해서 kernel에서 Filesystem in userspace support 를 켜주어야 했다.

[링크 : http://fuse.sourceforge.net/]
[링크 : http://en.wikipedia.org/wiki/Filesystem_in_Userspace]
Posted by 구차니
서울시의 제설장비/인원이 부족해서 시민들에게
눈을 치우도록 책임을 떠밀어 놓고는 안하면 벌금이라..


웃기지 않아?


그럼 치우면 상금을 주던가.
아니면 세금 면제를 해주던가.

그것도 아니면 그냥 벌금이라고 하지말고, 동참하는 분위기만 만들던가


[링크 : http://media.daum.net/society/view.html?cateid=1067&newsid=20100107115124763&p=nocut]

'개소리 왈왈 > 정치관련 신세한탄' 카테고리의 다른 글

출근일기 - 20100127  (4) 2010.01.27
공인인증서 하드에 저장 못하게 하면?  (0) 2010.01.15
12월 12일  (0) 2009.12.12
통신사 낙시질!  (2) 2009.12.07
기차표가 달라졌어요!  (4) 2009.12.06
Posted by 구차니
타이머는 처음인데.. 머가 먼지 모르겠다 ㅠ.ㅠ
#include "stdio.h"
#include "avr/io.h"
#include "avr/interrupt.h"
#include "util/delay.h"

static int uart_putchar(char c, FILE *stream);
static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);

static int uart_putchar(char c, FILE *stream)
{
  if (c == '\n') uart_putchar('\r', stream);
  loop_until_bit_is_set(UCSR0A, UDRE);
  UDR0 = c;

  return 0;
}

#define OVERFLOW 256
#define TICKS_PER_SEC 1000
#define Prescaler 64

volatile unsigned int tic_time;

ISR(TIMER0_OVF_vect)
{
	tic_time++;
	TCNT0 = OVERFLOW - (F_CPU / TICKS_PER_SEC / Prescaler);
}

int main(void)
{
	/* for USART */
	UBRR0H = 0;
	UBRR0L = 8; // 115k with U2X = 0
	UCSR0A = 0x00; // U2X = 0;
	UCSR0B = 0xD8;
	UCSR0C = 0x06; //Asyncronous - no parity - 1bits(stop) - 8bits(data)

	DDRD = 0x00;

	stdout = &mystdout;

	TCCR0 = 0x04;     // Prescaler 설정
	TCNT0 = OVERFLOW - (F_CPU / TICKS_PER_SEC / Prescaler);// 오버플로우에 사용될 초기값
	TIMSK = 0x01;     // 오버플로우 인터럽트 허용
	sei();

	int count = 0;
	for(;;)
	{
		if(tic_time == 1000)
		{
			tic_time = 0;
			printf("c %d\n",count++);
		}
	}
    return 0;
}
일단 사용법을 몰라서. 구글 검색하다 나온 rcan 님의 블로그 내용을 일단 복사해서 붙여넣었다.
[링크 : http://rcan.net/560]


기본적인 내용은 printf() 사용하는 것들이고, F_CPU는 cpu 클럭에 관한 선언문으로
AVRStudio wizard 사용시 클럭을 넣어주면 생성되는 변수이다.

타이머 관련 내용은 다음과 같다.

ISR(TIMER0_OVF_vect) // 8bit Timer0 에 대한 인터럽트 루틴
TCCR0;             // 타이머 프리스케일러
TCNT0;             // 타이머/타운터용 초기값
TIMSK;              // 타이머 오버플로우시 인터럽트 발생

일단 TCCR0를 보자면


타이머/카운터 제어용 레지스터로서,

Bit 7 – FOC0: Force Output Compare
Bit 6, 3 – WGM01:0: Waveform Generation Mode
Bit 5:4 – COM01:0: Compare Match Output Mode
Bit 2:0 – CS02:0: Clock Select

에 대한 설정을 하게 된다.

TCCR0 = 0x04 에서 0은 WGM01:0=0 으로 아래의 테이블을 보면(엄밀하게는 0x48 값의 위치이다)
Timer/Counter Mode of OperationNormal로 되어있다.

이 모드에서는 0에서 부터 255까지(8bit 타이머) 증가하며,
별도의 카운터 값 리셋은 하지 않으나 오버플로우 된상태로 계속 더하므로,
실질적으로 255다음에 0부터 계속 증가하게 된다. (TCNT0는 수정하는 즉시 그 값부터 증가하게 됨)


TCCR0 = 0x04 에서 4는 CS02=1로 아래의 테이블을 보면
clkT0S/64 (From prescaler) 라고 되어있다. 즉, 입력 클럭을 64로 나누어서 느긋하게 증가시킨다.




그리고 TCNT0
카운트를 위한 변수이고, 8bit timer/counter 이므로 0x00 에서 0xFF 즉, 0 에서 255 값을 가지며
255가 되면 overflow interrupt를 발생시킨후 0부터 다시 숫자를 증가시킨다. (normal mode)

그런데 이 변수에 복잡한 수식으로 값을 넣는 이유는 정확한 시간을 발생하기 위해서이다.
클럭마다 다르겠지만, 일단 클럭을 위에서 1/64로 주므로 64 clock 마다 1씩 증가된다.
16Mhz 에서 64clock 마다 인터럽트를 생성하면(F_CPU / Prescaler) 1초에 250,000 번 발생하게 되고
이 오버플로우 갯수를 세어 1000번을 묶으면 (tic_time == 1000 그리고 F_CPU / TICKS_PER_SEC / Prescaler)
1초에 250번의 오버플로우가 발생하게 된다.
그런데 오버플로우 값은 255 까지(총 256) 이므로, 0부터 증가해서 255까지 timer를 증가시키면
1초가 맞지 않게 되므로, TCNT0의 값을 OVERFLOW - 250 으로 하여 초기값을 맞춰주게 된다.
결과적으로 TCNT0의 값은 6이 된다.
(음.. OVERFLOW가 255여야 하지 않을려나..)



그리고 TIMSK는 이름대로 타이머 인터럽트 마스크 레지스터로,

Bit 1 – OCIE0: Timer/Counter0 Output Compare Match Interrupt Enable
Bit 0 – TOIE0: Timer/Counter0 Overflow Interrupt Enable

오버플로우시에 인터럽트를 발생시키거나
OCR0(Output Compare Register) 값과 TCNT0의 값이 동일할때 인터럽트를 발생시키도록 설정한다.

TIMSK = 0x01; 이므로 TOIE0가 설정되었고, 이 값은 overflow 시에만 인터럽트를 발생시키도록 한다.


Posted by 구차니
파일방2010. 1. 6. 22:03

좋다기 보다는.. 내가 워낙 정리 안하고 산걸지도..

[링크 : http://www.ccleaner.com/]
[링크 : http://www.ccleaner.com/download/downloading] << 다운로드
Posted by 구차니