아아~ 이거 주말을 다 날렸습니다. 결국 cygwin으로 옮겨타고 나서야 binutil을 컴파일 할 수 있었는데... gcc를 컴파일 하려니 이것 저것 문제가 많아서 결국 실패했습니다. ㅜ_ㅜ
컴파일을 한참 진행하다보니 거의 마지막 단계인 nm을 사용하는 부분과 ar을 사용하는 부분이 문제인것 같던데... makefile 안에 있는 아래와 같은 부분이 정상적으로 동작하지 않는 것 같습니다.
AR_FOR_TARGET = ` \
if [ -f $(objdir)/../binutils/ar ] ; then \
echo $(objdir)/../binutils/ar ; \
else \
if [ "$(host)" = "$(target)" ] ; then \
echo ar; \
else \
t='$(program_transform_name)'; echo ar | sed -e $$t ; \
fi; \
fi`
AR_FLAGS_FOR_TARGET =
AR_CREATE_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) rc
AR_EXTRACT_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) x
RANLIB_FOR_TARGET = ` \
if [ -f $(objdir)/../binutils/ranlib ] ; then \
echo $(objdir)/../binutils/ranlib ; \
else \
if [ "$(host)" = "$(target)" ] ; then \
echo $(RANLIB); \
else \
t='$(program_transform_name)'; echo ranlib | sed -e $$t ; \
fi; \
fi`
NM_FOR_TARGET = ` \
if [ -f ./nm ] ; then \
echo ./nm ; \
elif [ -f $(objdir)/../binutils/nm-new ] ; then \
echo $(objdir)/../binutils/nm-new ; \
else \
if [ "$(host)" = "$(target)" ] ; then \
echo nm; \
else \
t='$(program_transform_name)'; echo nm | sed -e $$t ; \
fi; \
fi`
원래의 의도대로라면 if else에 의해서 x86_64-linux-nm 이나 x86_64-linux-ar과 같이 치환되어야할 것들이 그대로 쉘에 출력되어 난데없는 rc.exe가 실행되는 안습인 상황이 벌어지더군요. ㅡ_ㅡa... 쉘이 문제인지 makefile이 문제인지 확실하게 모르겠습니다만... 정상적으로 실행이 안되는 것은 사실인 것 같습니다. ㅎㅎ
아아~ 이거 주말을 다 날렸네요. ㅜ_ㅜ 내일은 꼭 성공해야할텐데... 큰일입니다. ㅜ_ㅜ
그럼 좋은 밤 되세요 ;)
ps) cygwin에서 x86_64로 크로스 컴파일 해보신 분 있으시면 팁 좀 부탁 드립니다. (_ _)
거의 4일 동안 문서를 뒤지고 직접 테스트를 수행한 결과, IO APIC와 APIC간의 관계와 8259A(PIC) 칩간의 관계에 대해서 알아냈습니다. 더불어 BIOS에 존재하는 MP 관련 정보와 IO APIC의 Redirection Table, CPU의 APIC의 레지스터에 의미에 대해서도 대충 알아냈습니다. ㅜ_ㅜ)-b
어떻게 테스트 했는지는 나중에 올리겠습니다. 나름 복잡한 내용을 포함하고 있고, 또 시간이 너무 늦은지라 ㅎㅎ 대신 아래의 스샷을 첨부합니다. 제가 만든 OS(KKAMAGUI OS)에서 IO APIC를 통해 BSP(Bootstrap Processor)에 키보드와 타이머 이벤트를 밀어넣는 화면입니다. 볼품없지만 이게 4일 동안 작업한 것이라는... OTL....
그래도 IO APIC와 Local APIC에 대해 잘 모르면 Sysmmetric I/O로 갈 수 없기 때문에 어쩔 수 없었습니다. ㅜ_ㅜ)-b 결국 하긴 했군요. 흑흑.... 8259A(PIC) 컨트롤러의 타이머/키보드 인터럽트를 발생 못하도록 mask 했는데도 인터럽트 방식으로 잘 동작하는 화면을 보니 신기하군요. ^^;;;;
요 며칠째 계속 VMWare하고 Multiple Processor 스펙, 그리고 IO APIC 스펙을 함께 보며 삽질을 하고 있습니다. 그런데 아무리봐도 뭔가 이상하군요.
Multiple Processor 스펙에 보면 MP Floating Pointer Structure의 Feature 2 정보에 IMCRP 비트가 셋팅되어있지 않으면 IMCR 레지스터가 존재하지 않는 것이고...이런 경우 기본 모드는 Virtual Wire 모드라고 되어있습니다.
앞서 http://kkamagui.tistory.com/497 에서 설명 드렸듯이 Vritual Wire 모드는 2가지 모드가 존재하고, 테스트해본 결과 Local APIC는 다 Enable 되어있고 IO APIC의 Redirect Table이 모두 Default 값으로 Disable 되어 있으므로 Virtual Wire mode with Local APIC 라고 볼 수 있습니다(아래 그림 참조).
그런데 웃긴건, BIOS가 MP를 초기화하고 그 정보를 저장해놓는 MP Configuration Table의 I/O Interrupt Assignment Entries 정보를 보면 IO APIC가 활성화 되어있으며 8259 컨트롤러가 IO APIC의 첫번째 pin에 연결되어 있다고 나옵니다. 나머지 타이머나 키보드 등등도 다 IO APIC에 연결된 것으로 설정되있습니다. ㅡ_ㅡa...
만약 그렇게 연결되어있다면 IO APIC의 Redirect Table에도 동일한 설정으로 저장되어있어야 맞는 것 같은데... IO APIC의 Redirect Table에는 아무것도 안들어있으니... ㅡ_ㅡa... 이게 당체 어디가 맞는 건지 알 수가 없군요. ^^;;;; Redirect Table에 아무런 값이나 막 넣어봐도 별 에러없이 동작하던데... VMWare의 BIOS가 신경을 안쓰는 건지... 아니면 원래 그런 것인지 모르겠습니다. ㅜ_ㅜ
그리고 Symmetric I/O는 당체 어떻게 ON 하는 것인지... ㅡ_ㅡa... 그냥 Local APIC를 다 활성화 시키고 I/O APIC의 Redirect Table에서 Destination을 손보면 되는 것인지... 이것 참... Redirect Table의 비밀이 풀려야 다음 진도를 나갈 수 있을 것 같은데... 이게 쉽지 않군요. ^^;;;;
에혀... 죽겠습니다. 혹시 아시는 분 계시면 제보 부탁드립니다. ^^)/~ 그럼 좋은 밤 되시길~ ;)
예비군 내내 Intel Architecture Volume 3을 봤습니다. 그리고 고향에 내려오는 도중에 PSP로 Multile Processor(MP) Spec을 계속 봤었는데... 뭔가 좀 이상하더군요. Intel 문서에는 I/O APIC에 대해서 아주 조금 언급하고 있습니다. 그냥 APIC와 연결되있다는 정도로 말이지요. ^^;;;;
그런데 MP Spec에 보면 PIC, Virtual PIC, Symmetric I/O의 각 방식에 대해 아래와 같이 자세히 그려놓고 있습니다.
<PIC 모드>
<Virtual Wire Mode With Local APIC>
<Virtual Wire Mode With IO APIC>
<Symmetric IO Mode>
보시면 아시겠지만 CPU의 Boundary 안쪽에 IO APIC가 있는지 바깥쪽에 있는지 좀 불분명합니다. 어렴풋이 버스 배열 상태나 위치를 봐서 바깥쪽에 있다고 추측합니다만... 이것만 봐서는 확실히 알수가 없었습니다. 그래서 이것 저것 뒤지다보니 intel-82093-apic 문서를 찾았습니다. IO APIC 컨트롤러에 대한 문서더군요. ^^;;; 거의 바깥쪽에 있는게 확실한 것 같습니다. 그런데 이게 왜 중요했던건지... ㅡ_ㅡa;;;;
생각난 김에 VMWare의 부팅했을때 모드가 위의 그림 중에 어떤 것인지 확인을 좀 해봤습니다. 몇가지 테스트가 있는데... 테스트 과정은 좀 복잡해서 생략하고 결론만 이야기하면 Virtual Wire Mode With Local APIC 인 것 같습니다. 왜냐하면 I/O APIC쪽에 Interrupt Remapping Table인가 하는 녀셕이 Default 값으로 되어있거든요. 즉 안쓴다는 이야기지요. ^^;;; 그동안 다른쪽 코어에는 인터럽트쪽 설정을 안했기 때문에 별 신경을 안쓰고 있었는데, 이제 다른 코어에 인터럽트를 활성화하려면 이것이 중요한 단서가 되서 한번 읽어봤습니다.
음... 이제 몇가지 코딩을해서 Symmetric IO Mode 로 전환하고 테스트를 좀 더 진행해볼 생각인데... 이것 참... 할일이 많네요. ^^;;; 언제쯤 또 할 수 있을지... 요즘 들어 시간이 부쩍 부족한 것 같습니다. ㅎㅎ 그래도 잘 쪼개서 이것 저것 해봐야겠지요 ;)
그동안 OS를 여러번 만들어봤습니다만, 2002년에 시작한 KKAMAOS 외에는 그렇게 디테일한 레벨까지는 만들지 않았습니다. 프로그래머라면 다들 그렇겠지만 "했던" 일을 다시 한다는 것 자체가 고통이어서 다시 하려니 손이 안가더군요. 그래서 CPU를 ARM이나 DSP 같은 걸로 살살 바꿔가면서 "부팅 -> OS 로딩 -> 멀티태스킹" 정도 구현하고 끝냈습니다.
그런데 이런 저런 사정으로 한번 더 만들게 됬는데... 이번에는 좀 색다르게 64bit로 만들게 될 것 같습니다. 사실 64bit에 대해서는 대충 알고 있었던지라 한번 볼 필요도 있고 해서 과감히 결정했습니다. 한 며칠동안은 스터디만 죽어라고 할 것 같군요. ^^;;;;
오늘 예비군 훈련 받으면서 Intel 문서 좀 보려고 PSP에 넣어갔었는데... 바보같이 보안 검색대에서 걸려서 PSP를 압수당했다는.... ㅜ_ㅜ... 결국 예비군 훈련 시간을 거의 다 날려버렸습니다. ㅜ_ㅜ 오늘 좀 봤으면 저녁에 코딩을 어느 정도 할 수 있었을텐데.... 많이 아쉽군요. ㅜ_ㅜ...
일단 진행 중간 중간에 팁이나 스크린샷 위주로 포스팅 할 예정입니다. 갑자기 또 불이 붙기 시작하는군요. ;) 다들 기대해 주세요 >ㅁ<)/~
아아... 거의 목차만 4일째 쓰고 있습니다. 뭐 단순히 목차만 적는게 뭐 그리 힘드냐고 말씀하실지 모르지만... "목차"만 적는 것이 아니라 그 안에 들어갈 내용도 개요 형식으로 적어야 하니 시간이 굉장히 많이 걸립니다.
개요를 적는 다는 것 자체가 이미 내용을 쓰고 있는 것과 비슷한 레벨이더군요. 굳이 비유하자면 뼈대를 만들고 있다랄까요? 살만 붙이면 완성될 수 있도록... ^^;;; 처음에는 간단하게 시작했습니다만, 다루는 범위가 점점 불어나서 이제는 챕터(Chapter) 50개가 넘습니다. @0@ 이걸 다 구현할 수 있을지... 이젠 저도 모르겠습니다. 쿨럭..;;; ㅜ_ㅜ
그래도 내일이나 모레쯤되면 목차를 완성할 수 있을 것 같습니다. 각 항목당 분량도 적어달라고 요청이 왔지만... 아무래도 각 세부 항목에 분량을 예측하기는 힘들 것 같고 대략 5페이지 정도 설명에 3페이지 정도 소스코드를 할당한다고 치면 400쪽이 넘는... ㅡ_ㅡa... 일단 뭐... 전체 분량만 대략 예측해서 보내야겠습니다.
아우~ 목차가 끝나고 나면 인텔 메뉴얼을 들고 살아야 할 듯한데... PSP에 인텔 메뉴얼 파일이나 넣어 다니며 읽어야겠네요. ^^)/~
역시 전 개발할때가 제일 좋다는... ㅎㅎ 빨리 끝나고 개발 들어갔으면 좋겠습니다. ;) 그럼 다들 좋은 밤 되세요~ ^^)/~
자신만의 Network Set-Top Box를 만드는 방법에 대해서 설명해 놓은 자료입니다. YBox2 라는 이름을 가지고 있고 PAL과 NTSC 2가지 방식의 출력을 지원한다는 군요. 원문은 http://ladyada.net/make/ybox2/index.html 에서 보실 수 있습니다.
요즘 계속 컴퓨터 앞에만 앉아 있어서 뭔가 특단의 조치가 필요하다고 느꼈습니다. 뭘할까 굉장히 고민했는데, 갑자기 예전에 추던 춤을 다시 춰볼까 하는 생각이 들더군요. 제 스타일이 생각하면 바로 지르는 것이라... 오늘 다짜고짜 사내 힙합 동호회로 출동했습니다.
당연히 처음부터 몸을 실컷 돌리고(??) 올 생각이었기 때문에, 가서 바닥부터 살폈습니다. 맨질 맨질한게 아주 잘돌겠더군요. ㅎㅎ 아유 좋구로... ㅋㅋㅋ
잠깐 눈치를 보다가 그냥 바닥에 몸을 내던졌습니다. 간만에 하는거라 힘이 무지 들었습니다. 이거 원... 연수때만 생각하다가 손목도 다칠뻔하고... 몸무게가 장난 아니게 늘었더군요(사실 원상 복구 된겁니다만... ㅡ_ㅡa...).
한참 혼자 돌리고 있는데 갑자기 힙합 동호회 사람들이 주변에 몰려들더니만, 가입시키자고.... ㅡ_ㅡa... 알고 봤더니 스탠딩 댄스(Standing Dance) 위주의 동호회라서 B-Boy가 별로 없더군요. 있어도 다 같이 이제 배우는 분들이라 같이 연습할 사람이 필요했던 듯... ㅡ_ㅜ...
간만에 했더니 허리도 아프고 손목도 아프고... 몸이 아주 난립니다. 그래도 땀 흘리고나니 기분은 좋네요. ;) 앞으로 자주 나갈까 생각하고 있습니다. 이 참에 확 연습해서 소시적에도 못해본 토마스 + 나인틴 로빈 + 윈드밀 + 토마스 + 윈드밀 + 에어트랙 콤보를 콱~!!! 잘되면 나중에 찍어서 한번 올리겠습니다. ;)
아아... 이거... 오늘도 목차를 못쓰겠군요. ㅡ_ㅡ.... 큰일이네요. 빨리 써서 보내야하는데... 으윽.... 내일은 꼭 일찍와서 써야겠습니다.
한 2년 전에 Xnote LW20-35WK라는 모델을 약 200만원이라는 거금을 주고 샀습니다. CPU가 2.13GHz에 램이 2GByte 달린 괴물같은 녀석이었지요. ^^;;;; 그때는 노트북 램이 아무리 커도 느린 HDD 때문에 별로 안빠르다는 사실을 몰랐습니다. ㅜ_ㅜ (결국 스펙 오버....)
세월이 흘러 프로그램들은 점점 더 무거워졌고, HDD가 느린 LW20으로 버티기엔 무리더군요. 결국 데스크탑으로 갈아타고 노트북은 저쪽 책꽂이 한켠에 던져놨었습니다. 그런데... 다들 아시겠지만 데스트탑이 열이 장난이 아닙니다. ^^;;; 모니터도 24인치짜리를 쓰고있으니 아래에서 위에서 열이 펄펄.... 결국 견디다 못해 노트북을 집었습니다.
역시나 노트북이 상당히 느리군요. 예전에 어떻게 사용했는지 모르겠습니다. 데스크탑과 비교하면 이건... 뭐... ㅡ_ㅜ... 그래도 열은 안나니 좋긴한데.... ^^;;;;; 어차피 웹 작업 위주니 작업에는 큰 문제가 없지만... 워드나 기타 개발 툴을 실행할때는 죽을 것 같네요. ㅎㅎ
그래도 열이 확 줄어들어서 좋습니다. ;) 앞으로 글쓸 일이 좀 많아질 듯 한데... 글쓰는 일과 같이 로드가 적게 걸리는 일은 노트북을 쓰고, 큰 로드가 걸리는 부분은 데스크탑을 켜서 원격으로 하는 방법으로 해야겠습니다. 이렇게 되니 안팔기를 잘한 것 같네요. ^^)/~ 사람 마음이란게 참... ㅎㅎ
아아~ 오늘부로 가상 HID(Virtual HID)관련 작업이 거의 마무리되서, 앞으로 다른 일을 좀 할 수 있을 것 같습니다. 날아갈것 같군요. 앞으로 더 재미난걸 해볼 생각입니다. ;) 그럼 다들 좋은 밤 보내시길~ ㅎㅎ
몇시간 삽질 끝에 드디어 가상 HID(Virtual HID)를 완성했습니다. ^^)/~ 약간 문제가 있긴 하지만 그래도 동작은 하니... ^^;;;;; 하나의 드라이버로 동작하게 할 생각이었습니다만은 보안 프로그램에 따라 특색이 조금씩 달라서 결국 포기했습니다.
이게 희한한게... 하나는 완전히 내렸다가 새로 올리고 다른 하나는 아예 그냥 잘라버립니다. ㅡ_ㅡa... 이것 참... 그래서 한쪽에 맞춰두면 다른 한쪽에서 문제가 발생하더군요. 결국 두가지 버전으로 구성했습니다. 이렇게 되면 버전관리가 힘든데... 흑흑.... ㅜ_ㅜ 어쩔수 없지요 ㅜ_ㅜ...
대충 키보드/마우스 이벤트를 넣어보고 정리하려고 키보드 쪽을 유심히 봤더니, HID 키보드의 값과 전통적으로 사용하는 스캔 코드(Scan Code)의 값이 서로 다르더군요. @0@)/
결국 기존의 LIbrary가 스캔 코드 값을 받도록 되어있었기에, 호환성 유지를 위해 HID 값으로 바꿔줘야 했습니다. 결국 Mapping Table을 만들어야 한다는 이야기!!! 그래도 구글신이 도와주셔서 괜찮은 문서를 구했고, 삽질 끝에 맵핑 테이블을 완성했습니다. ^^)/~
오늘 무슨 행사를 한다길래 그냥 앉아 있으면 되는 줄 알고 어제 2시까지 코드를 만지다가 잤습니다. ㅡ_ㅡa... 아 이거 원... 거의 다 됬는데 진짜 한끗 차이로 모 보안 프로그램에 걸리더군요. ^^;;; 사실 걸린다는 표현보다는 이녀석이 HID Keyboard Driver를 내려버린다는 말이 더 맞는 것 같습니다. 그래서 키보드 입력이 안되는 문제가.... ^^;;;;
그래서 이걸 해결하려고 이것 저것 손보다보니 2시 넘어서 잤습니다. 그래도 일은 안하니까 좀 편한 마음으로 잤지요. 그런데 이게 왠일입니까? 노가다를 시키는 것이 아니겠습니까? ㅜ_ㅜ)/~ 아흑... 잠도 별로 못잤는데 땀 뻘뻘 흘리면서 이상한 걸 했더니 나중에는 머리가 다 아프더군요. 지금도 지끈 거리는 상탭니다. ㅜ_ㅜ....
불행은 이 상태에서 다시 코드를 보고 있다는 것이고, 그나마 다행인 점은 칼퇴근을 해서 좀 쉬었다는 겁니다. ㅎㅎ 아유... 진짜 머리 아프네요. ^^;;; 당췌 어떻게 해야 해결할 수 있을지....
오늘도 열심히 한번 파봐야겠습니다. 뭐라도 나오겠지요 ^^)/~ 그럼 다들 좋은 밤 되시길~
흑흑... 이게 얼마만인지 모르겠습니다. ㅜ_ㅜ)-b 쌩판 모르는 상태로 HID 드라이버를 손보기 시작해서 키보드와 마우스를 생성하기까지 한참 걸렸고, 보안 프로그램에 걸려서 이걸 피해 가는데 또 한참 걸렸네요.
ㅜ_ㅜ 아아~ 진짜 ㅡ_ㅡa... 간단히 쓸 수 있는 API를 막아놔서 다른 방법을 찾는다고 고생했습니다. ㅜ_ㅜ 제가 아는 범위에서 테스트 안해본 케이스가 거의 없을 정도로 오만가지를 다 썼는데... 결국 간단한 아이디어로 해결... ^^;;; 그것도 놀다가 깜짝 떠올라서... ㅎㅎㅎ(역시 인생은 타이밍~!!!). 아이디어는 어쩔 수 없이 비공개... 왠지 하면 큰일날듯해서 ^^;;;;;
가상 HID 드라이버가 HID miniport 드라이버이다 보니 이것저것 제약사항이 많더군요. 뭐 하나 제대로 할 수 있는 것도 없고... 툭하면 재부팅되기 일수이고... 평일 저녁시간과 주말 일부를 올인해서 겨우 해결했습니다. 방금 테스트했는데 큰 문제가 없는 것 같네요. ^^)/~~~
이제 더러워진 드라이버 코드를 좀 정리하고, 약간 테스트만 더하면 끝날 것 같습니다. 어휴~ 이번 주는 따로 스케줄이 있어서 내일 말고는 시간이 없을 듯한데, 내일 저녁에 완전히 끝내 놓야겠군요. ^^;;;; 어휴... 죽는 줄 알았습니다. 어휴~ 진짜... @0@)/~!!!
덕분에 HID에 대해서 공부 한번 제대로 했습니다(정말? ㅡ_ㅡa..). 역시 DDK만한게 없군요. 최고입니다. ㅎㅎ DDK 만세~~ 그럼 다들 좋은 밤 되세요 ;)
ps) 이런... ㅡ_ㅡa... 한쪽은 또 다른 수를 써놓았군요. ㅡ_ㅡ;;; 좀 더 파봐야 할 것 같습니다. ㅜ_ㅜ 아우~ 진짜... ㅜ_ㅜ)/~
간만에 고향집에 왔는데, 이것저것 할게 많군요. ^^;;;; 오후에 바닥에 놓을 타일을 좀 나르고 나니 아래집 PC 업그레이드가.... 두둥... @0@)/~ 예전부터 조금씩 조금씩 업그레이드를 진행했는데, 뭔가 인연이 안맞는지 계속 실패했었습니다. 오늘도 일이 잘 풀리지 않더군요. 그래도 오늘은 끝장을 보겠다는 마음으로 열심히해서 완료했습니다. @0@)/~!!!!
이게 참 희한한게... 히스토리를 좀 이야기 하자면.... 첫번째는 컴퓨터가 너무 느리다고해서 손을 좀 봐주러 갔습니다. 그런데 왠걸... PC가 느릴만 한 겁니다. ㅡ_ㅡa.. XP를 쓰고 있는데 1G CPU와 256M의 램에 비디오 카드는 메모리 공유... ㅡ_ㅡa... 그래서 결국 바탕화면이랑 불필요한 프로그램만 제거해줬습니다.
두번째는 메인 보드와 CPU가 붙은 좋은 보드가 있다고 해서 옮겨달라고 하더군요. 그런데 이게 왠일입니까? 원래 쓰던 PC가 너무 구형이라 건질 부품은 달랑 HDD와 FDD 정도... ㅜ_ㅜ... 그래서 일단 부품 견적서를 주고 주문을 하라고 했습니다.
세번째는 바로 오늘인데... 이제 부품도 다 왔겠다 한번 옮겨보자 했더니... @0@)/~!!! 메인 보드가 VGA 통합이 아니었던겁니다. @0@)~!!!! 이거 완전 낭패... 그래서 다음에 하자고 말을 할려니 초롱 초롱한 아이들의 눈망울이... ㅜ_ㅜ 그래서 늦은 밤 중고 부품을 겨우 구하여 PC를 완성하고 Window XP를 깔았습니다. 다 하고나니 2시군요. ^^;;;; 완성하고나니 다행이도 구해온 보드가 듀얼 1.8G라서 많이 빠르군요. 나름 갓빠(?)가 좀 섰습니다. ㅎㅎ
어휴... 힘은 듭니다만은 애들이 좋아하는 걸 보니 뿌듯합니다. ㅎㅎ 그나저나 이거 할 일이 태산인데, 하나도 못했네요. ㅜ_ㅜ 아아~ 내일 일찍가서 마무리해야겠습니다. ^^;;;;
어제 갑자기 책 한권 써보는게 어떨까하는 생각이 들었습니다. 뭐 미치지 않고서야 이런 생각을 하겠냐만, 마이크로소프트웨어에 올리기에는 좀 복잡하고 양이 많다고 생각하고 있던 주제라서... ^^;;;; 해당 주제에 관한 자료가 인터넷에서 찾기 힘들 뿐더러, 실제로 구현된 사례도 그리 많지 않은 것 같더라구요. ^^;;;;
일단 될지 안될지는 모르겠지만 한번 출판사에 연락을 취해볼 생각입니다. 기획쪽이나 그런 곳에 연락을 취하면 되겠지요. ㅎㅎ 주제나 자세한 내용은 일단 결정이 나면 올리겠습니다. ^^;;;;
아아~ 이거 오늘은 작업을 하나도 못하고 그냥 자겠군요. 빨리 가상 HID 드라이버도 완성해야하는데... ㅎㅎ 내일 해야겠습니다. ^^)/~
First, start up the BlueSoleil software and activate your Bluetooth adapters if needed.
Then hit the 1+2 buttons on your Wiimote and click the center orange circle. It will take a few seconds and then find it.
Note: Make sure that the 4 LEDs on the bottom of the Wiimote are blinking during this whole process. Since the Wiimotes only stay on discover mode for several seconds, you can either hold down the 1+2 buttons the whole time or press them every few seconds.
If BlueSoleil does not detect your Wiimote, Unplug your bluetooth device and plug it back in. Then press the center orange circle and try again.
Right click the Wiimote (NINTENDO-RVT-CNT-01) that shows up and click Refresh Services.
Should this not work, press 1+2 on the Wiimote and simply click on the Wiimote's icon in BlueSoleil
Click the Bluetooth HID button that shows up at the top and you are done! Now you can use your Wiimote with programs such as GlovePIE and WiinRemote.
This is with bluesoleil installed, and this is how you can make your wiimote work without opening or launching bluesoleil! Make sure Bluesoleil is closed before doing this.
1.) Go to your computer's control panel, and open the bluetooth device cp..(see icon)
2.) A dialogue will come up, click on "add device" button. (see image)
4.) Click next, and hold your Wiimote's 1 & 2 buttons together... or better, open up the back of your wiimote and press the sync button and hold it..and the device will appear as here.
5.) Select the new device and click next, DONT LET go of the 1 & 2 buttons or the sync buttons yet! Click the "no passcode" selection and press next..while NOT letting go of the buttons. If you're confused, look at this image.
6.) Your computer will now add the device accordingly, do not let go of the buttons until everything is set up.. no, you dont let go of it until you are back in the window where it says "add devices". If you successfully performed this, your Wiimote will register as "connected" and you are able to use it with GlovePie.
Note: If you are unable to use it, even though the control panel says your device is connected - make sure that the "bluetooth fix" is selected in glovepie.
간단히 시작했던 작업이 어느새 필터 드라이버를 동적 로딩하는 단계까지 발전했습니다. ㅜ_ㅜ)/~ 이게 어찌된 영문인가 모르겠습니다. ^^;;;;
기존의 드라이버가 DDK의 소스를 기반으로 만들어졌는데, 정적으로 로딩되서 실행되는 방식이었습니다. 그런데 갑자기 동적 로딩으로 할 수 있게 해달라는 요청이 있어서 소스를 손보기 시작했습니다. 참고로 동적 로딩과 정적 로딩은 아래와 같은 차이가 있습니다. ^^
정적 로딩 : 윈도우 레지스트리에 등록하여 윈도우 시작 시에 자동으로 로드되는 방식
동적 로딩 : 사용자가 요청하면 로딩하는 방식, 일반적으로 시스템 초기화가 완료된 이후에 로딩됨
처음에는 간단히 동적 로드만 되면 되겠거니 생각했는데, 이게 일이 점점 많아지는 겁니다. ㅜ_ㅜ 키를 입력하게 하는 주요 루틴을 다른 쪽으로 옮겨야 하더군요. 이때부터 작업 로드가 심하게 걸리기 시작했습니다. 잠도 못자고 분석하고 테스트하고... 후덜덜덜...
정적 로딩하는 버전은 PNP 메시지를 받아서 드라이버가 등록될 때 상위 Driver의 Callback 함수를 가지고 있다가 그걸 강제로 호출해서 값을 넣도록 하는 방식이었는데, 동적 로딩할 때는 PNP 메시지를 받지 못한 상태로 로딩되기 때문에 MJ_READ 에서 이를 처리하도록 해야했습니다. 삽질 끝에 알았습니다. 이런... ㅜ_ㅜ 더불어 IRP를 Cancel해야 다시 읽는 다는 것두요. ^^;;;
노트북이 없었더라면 작업 시간이 두배 정도 더 걸릴뻔 했습니다. 어휴... 끔찍하네요. ^^;;;;
방금 테스트를 해봤는데, 정상적으로 동작하는 것 같습니다.
신나는 주말입니다. ^^)/~