2011-02-18 컴퓨터를 대대적으로 업그레이드 하고 운영체제도 새로 깔았다. WindowsXP 에서 Windows7 64bit 로 다시 설치하고 리눅스도 64bit 로 설치했다.
최신 운영체제라서 설치하고 설정하는 것에 아무 문제가 없을줄 알았다. 예전에는 그래픽카드 설정에 신경을 써야했지만 요새는 dvi 포트에 모니터 꽂으면 별다른 설정 없이 알아서 해상도 잡고 잘 보여줬기 때문에...
그런데 이번에는 다시 엄청난 삽질을 하고 나서야 제대로된 화면을 볼 수 있었다 ㅠㅠ
리눅스만 그런것이 아니고 윈도우7도 같은 문제인데 아직 dvi 로는 제대로된 해상도를 쓸수가 없다.. 좀더 찾아봐야 할듯 ㅠㅠ
문제는 요새 nvidia 그래픽카드(amd 카드도 그런지는 안찾아봐서 모르겠음) 드라이버에서는 모니터의 EDID 를 참조하는데 옛날 모니터의 경우(중소기업 모니터라 그런건지..) 이것이 잘못되어 있는지 아니면 제대로 가져올 수 없는지 매우 낮은 해상도로만 화면이 표시된다.
내 그래픽 카드는 NVIDIA Geforce GTS450이다. 모니터는 MOTV CNC 에서 만든 20.1" 모니터로 최적 해상도는 1680x1050 이다. 그런데 dvi 포트를 사용하면 윈도우7 에서는 1024x768, 리눅스에서는 640x480 밖에 사용을 못한다. d-sub 포트로 연결하면 윈도우7 에선 1680x1050 을 쓸수 있지만(이것도 자동으로 설정되진 않고 잡아줘야 한다...) 리눅스는 이것도 1024x768 밖에 설정이 안된다.
문제를 해결하기 위해 먼저 Modeline 을 지정해주고 Modes 를 설정했다.
Tip. 예전에는 /etc/X11/xorg.conf 파일 하나에 X의 모든 설정이 있었지만 xorg 버전이 올라가면서(1.8부터) 지금은 /etc/X11/xorg.conf.d 디렉토리에 설정파일이 나뉘어 존재한다. 그렇지만 지금도 xorg.conf 파일을 사용할 수는 있다.
리눅스 커널에서는 cpu 의 정보를 담은 구조체가 전역변수로 선언되어 있고 그것을 통해 cpu 정보를 가져올 수 있는 것이다.
다만 커널 버전이 올라가면서 전에는 cpu_data[] 배열에서 직접 데이터를 얻을 수 있던 것이 이제는 안된다. (정확히 언제 바뀌었는지 모르겠는데 2.6.30 이후 부터는 안됨.)
현재 실행중인 cpu 정보를 얻기위한 current_cpu_data 매크로는 여전히 존재하며 cpu_data() 매크로를 통해 특정 cpu 의 정보를 얻어올 수 있으니 이를 이용해보자.
두 매크로는 <asm/processor.h> 에 선언되어 있다.
struct cpuinfo_x86 {
__u8 x86; /* CPU family */
__u8 x86_vendor; /* CPU vendor */
__u8 x86_model;
__u8 x86_mask;
#ifdef CONFIG_X86_32
char wp_works_ok; /* It doesn't on 386's */
/* Problems on some 486Dx4's and old 386's: */
char hlt_works_ok;
char hard_math;
char rfu;
char fdiv_bug;
char f00f_bug;
char coma_bug;
char pad0;
#else
/* Number of 4K pages in DTLB/ITLB combined(in pages): */
int x86_tlbsize;
#endif
__u8 x86_virt_bits;
__u8 x86_phys_bits;
/* CPUID returned core id bits: */
__u8 x86_coreid_bits;
/* Max extended CPUID function supported: */
__u32 extended_cpuid_level;
/* Maximum supported CPUID level, -1=no CPUID: */
int cpuid_level;
__u32 x86_capability[NCAPINTS];
char x86_vendor_id[16];
char x86_model_id[64];
/* in KB - valid for CPUS which support this call: */
int x86_cache_size;
int x86_cache_alignment; /* In bytes */
int x86_power;
unsigned long loops_per_jiffy;
#ifdef CONFIG_SMP
/* cpus sharing the last level cache: */
cpumask_var_t llc_shared_map;
#endif
/* cpuid returned max cores value: */
u16 x86_max_cores;
u16 apicid;
u16 initial_apicid;
u16 x86_clflush_size;
#ifdef CONFIG_SMP
/* number of cores as seen by the OS: */
u16 booted_cores;
/* Physical processor id: */
u16 phys_proc_id;
/* Core id: */
u16 cpu_core_id;
/* Index into per_cpu list: */
u16 cpu_index;
#endif
unsigned int x86_hyper_vendor;
} __attribute__((__aligned__(SMP_CACHE_BYTES)));
pc 에서 아까의 매크로로 얻어온 데이터는 struct cpuinfo_x86 구조체로 되어있는데 여기서 내가 관심있는 물리적 코어수 관련 정보는 x86_max_cores 로 보인다.
arch/x86/kernel/cpu/intel.c 파일을 보면 아래와 같은 코드가 있고
c->x86_max_cores = intel_num_cpu_cores(c);
arch/x86/kernel/cpu/amd.c 파일에는 다음과 같은 코드가 있었는데 이를 보면 x86_max_cores는 cpu 의 코어수가 맞는 것 같다.
c->x86_max_cores = (ecx & 0xff) + 1;
booted_cores 도 같은 값을 가지고 있는데.. OS에서 보는 코어의 수라고 하니 하이퍼쓰레딩 같은 것에 따라 달라질 수 있는 것 같다. 이것은 테스트를 한번 해 볼 필요가 있다. 아래와 같은 코드로 값을 확인해 볼 수 있다.
얼마전 노키아 5800 XpressMusic 을 샀다. 익뮤버스에 관한 글들을 보고 흔들리던 중 신규로 지르고 만 것이다!! 천천히 가지고 놀 생각이기 때문에 우선은 기본 펌웨어에 합법적인 어플만 설치해볼 생각이다. mgmaps 는 Creative
Commons license 하에서 배포하고 있으니 개인적, 비 상업적인 목적으로는 무료로 사용할 수 있다. 다만 다운받은 지도데이터의 경우 재배포는 위법이라 한다.
기본적으로 http://blog.kangjang.net/531 에서 보고 따라서 설치하려다가 컴퓨터를 윈도우로 재부팅하기 귀찮아 리눅스에서 하려고 했는데... 결국 이쪽이 훨씬 시간을 잡아먹어 버렸다;;; 어플은 그냥 다운받아 폰에 넣고 설치하면 되니 문제가 없었다.(리눅스에서도 USB 연결하면 대용량 저장소로 익뮤가 그냥 잡힌다.) 다음에 지도 데이터를 받아야 하는데 이것이 좀 문제.. 고생한 것을 좀 정리해 둬야겠다.
$ perl MapTileFE.pl Detected OS: linux Following map files are available. [생성한 map 파일이름], Choose one of Map File: [생성한 map 파일이름을 넣는다.] Map tiles per file (a power of two, 1-4096, default 32): 256
를 http://www.colinux.org/snapshots/ 의 최신 파일이름으로 변경한다.
set FN_COLINUX=devel-coLinux-20080511.exe
윈도우즈용 'wget'과 '7-zip'을 설치한다. 명령프롬프트에서 압축을 푼 폴더에 들어간 다음 아래 명령을 실행
co arch 1
설치가 종료되고 coLinux를 통해 Archlinux가 부팅된다. 'arch_README.txt' 파일을 참고해서 초기설정을 해준다.
INITIAL INSTALL =============== After logon by root(without password) later, do these jobs 1. change your root password passwd
2. disable other to access your colinux box nano -w /etc/hosts.allow # edit the file, append following line ALL: LOCAL
3. create normal user account, eg. daniel useradd -g users -m daniel passwd daniel
4. enable swap space (optional) free # check if swap already enabled, if enabled, skip following steps mkswap /dev/hda2 swapon -a
5. upgrade ArchLinux system pacman -Sy syslog-ng findutils # get the find utils and syslog reboot pacman -Su reboot
6. search the package you want to install, eg. vim pacman -Ss vim
7. get packages you want eg. pacman -S openssh mercurial sudo
8. access the C:\ by /mnt/win directory mkdir -p /mnt/win mount -t cofs cofs1:/ /mnt/win
9. adjust the arch.cmd The default arch.cmd will launch a colinux box with following options: a. cofs1=c:\ -- mapping the c:\ to cofs1:/ cofs device b. eth0=slirp,,tcp:22:22/tcp:5000:5000 -- mapping port 22 for ssh access and sample 5000 port -- you can access colinux by putty through localhost:22 You can adjust the arch.cmd to your personal environment option.
RECENT COMMENT