
linux상에서 매번 apt을 통해서 upgrade를 수행했었는데, 어느 순간부터 한글이 깨지는 현상이 나타났다. 이상하게 VS code가 아닌 다른 환경에서는 한글입력이 문제없이 잘되었다. 이와 관련해서 검색한 결과로는 Text Editor의 Font Family 중에서 "Droid Sans Fallback" 라는 것을 빼라는 내용이 많이 나왔다. 그런데 나같은 경우에는 오히려 빼니까 VS Code에 내장된 terminal의 폰트가 깨지기 시작했다. 이때문에 앞에서 말한 "Droid Sans Fallback" Font를 뭔가로 대체해야 하는데, "DejaVu Sans Mono" 로 대체했다. 인터넷에 소개된 대부분의 해결책이 해당 폰트를 제거하라고만 되어 있는데, 그걸로 해결안된 상황이라면 다른 폰트로..
회사에서 실험을 하다보니까, terminal로 출력되는 결과를 계속 확인해야 하는 경우가 생겼다. 물론 항상은 아니지만, 가끔씩이라도 확인하면서 정상적으로 동작하고 있는지 여부를 확인하고자 했다. 보통 이때 많이 사용하는게 screen이라는 것이다. screen은 일종의 terminal multiplexer로 일종의 가상 터미널과 같은 것이다. 보통 원격으로든 로컬로든 한 터미널에 한 유저만 할당받아서 사용하는 형식으로 되어 있다. 그래서 일반적으로는 터미널이 종료될때 유저도 로그아웃이 되는 것으로 간주되어 해당 유저가 실행한 프로세스나 어플리케이션도 동시에 종료된다. 물론 이런 것을 막기 위해서 & 연산자를 사용해서 background로 process가 돌게 할 수도 있겠지만 이때도 앞에서 말했던 것처..
Process에 대해서는 이전 포스트들에서도 많이 다룬 내용이니, 이번 포스트에서는 Linux 관점에서의 Process에 대해서 언급해보고자 한다. Linux에서의 Process 중 가장 먼저 실행되는 process는 Init이고 process ID는 1을 가리킨다. Init Process는 System이 부팅되고 난 후, 제일 처음으로 실행되는 Process이기도 하고, System 종료시점까지 가장 마지막으로 숭해되는 Process이기도 하다. 보통 Init이 실행되고 난 후에 시스템에서 필요한 Process는 Init에서 파생되어서 나오는데, 이 Init과 파생되어 나온 Process 간의 관계를 흔히 부모-자식 관계라고 표현한다. 물론 파생되어서 나온 Process에서 생성된 Process 간에도..
UART driver를 개발하다보면서 많은 문제에 봉착하고, 그걸 해결하려고 노력을 한다. 지금 제일 큰 문제가 UART IP내에 있는 FIFO buffer에 데이터를 읽어오는 속도보다 FIFO buffer로 데이터를 push하는 속도가 빠르다는 점이다. 이게 뭔소리지 하는 사람을 위해서 첨언을 하자면 어떤 크기가 일정한 공간에서 내가 가져오는 속도보다 외부에서 여기에 집어넣는 속도가 더 빠르다는 것이다. 이렇게 되면 어느 순간부터인가는 공간의 크기보다 많은 데이터들이 들어와 중간에 손실되는 것들도 생기게 된다. 지금은 UART에 한정해서 이야기하고 있는거지만, 아마 거진 FIFO buffer를 처리해야하는 작업들 대부분은 위와같은 overflow 현상에 대한 대처를 마련해놔야 한다. 나같은 경우는 이 ..
User가 주로 이용하는 Program은 보통 file을 읽고 쓰는 기능을 수행한다. 이 file은 보통 HDD라고 불리는 secondary storage에 저장되어 있는데, 각각의 file들이 저장되어 있는 위치는 physical memory처럼 뭔가의 일관적인 형태로 되어 있다. 우리야 OS가 올라가 있는 상태에서 file에 접근하니, file의 위치나 그 file이 가진 property를 text 등으로 확인할 수 있지만, 실제로는 이와 같은 정보는 physical I/O layer가 추상화된 형태이고 실제로는 0,1로 이뤄진 정보로 되어 있다. 우리가 0과 1을 이용해서 file을 쓰지 않는 것처럼 중간에 있는 filesystem layer가 사이를 중개해주며, 0과 1을 이용해서 r/w가 이뤄지..
지난 포스트에서 floating point 연산이 결국 libc library와 상관이 있고, application과 libc가 제대로 연결되지 않아 오류를 출력되는 것까지 확인했다. 결국 원인을 찾았으니 이제 그걸 해결하려면 libc를 다시 build를 해서 넣는 수밖에 없다는 결론에 도달했다. 그런데 여러 문제가 있었다. 사실 위 문제를 해결하는 가장 쉬운 방법은 prebuilt된 libc를 쓰면 되는 건데, 아무리 찾아봐도 soft-float을 위한 prebuilt 이미지가 하나도 없었다. 어디에선 codesourcery에서 배포하는 toolchain을 쓰면 된다길래, 가입하고 build해봐도 안되고.. 마침 server에서 지원하는 gcc cross compiler에도 버그가 있어서 libc가 제..
cc= - softfloat : arm-linux-gnueabi-gcc (gcc 4.7.1 for arm) - hardfloat : arm-linux-gnueabihf-gcc (gcc 4.7.1 for arm) compile option = - softfloat : -msoft-float - hardfloat : -mhard-float 용량 차이 : 차이 없음chanseok.kang@handel:~$ ls -al test* -rwxr-xr-x 1 chanseok.kang platform 8496 May 31 16:34 test -rwxr-xr-x 1 chanseok.kang platform 8496 May 31 16:34 test_hf readelf -A시 정보 : - test chanseok.kang@..
내가 속한 파트에서 하는 일중에는 Linux를 새로 만든 보드에 porting하는 작업도 한다. 그러고보면 참 이 부서에 속하게 된것도 운이 참 좋은거 같다. 회사에서 배우는게 참 많아서 회사를 가도 뭔가 지루하지가 않다. 물론 하는 일이 잘 안되면 또 다른 이야기이겠지만... 아무튼 우리 파트의 정말 멋지신 분이 Cortex A7 기반에서 돌아가는 Linux를 porting했다. 내가 할일은 이제 그위에서 돌아가는 benchmark tool을 조사하고 실제 돌아가게 하는 것이다. 이와중에 몇가지 안 사실을 좀 정리해보고자 한다. - benchmark의 핵심은 floating point 연산이다. linux에 돌아가는 lmbench나 coremark 같은 경우 대부분의 scenario가 floating ..
ubuntu는 보니까 arm cross compiler에 대한 ppa가 기본으로 지정되어 있지 않아 아무리 update 후 install을 해도 gcc version이 4.6에서 멈춘다. 이때문에 해당 package를 배포하는 ppa를 추가하고, update 히면 arm용 gcc-4.7 cross compiler를 설치할 수 있게 된다. 참고로 현재 arm cross compiler는 linaro에서 배포하고 있다. $ sudo add-apt-repository ppa:linaro-maintainers/toolchain $ sudo apt-get update $ sudo apt-get install gcc-arm-linux-gnueabi ( floating point unit이 있는 경우는 sudo ap..
System을 구성하는 Disk는 Partition으로 구성되어 있다. Partition이 뭔가 하면 물리적 디스크 내에서 sector나 cylinder 단위로 구분지어 놓은 연속적 집합의 형태라고 보면 되겠다. 일반적으로 disk당 4개의 primary partition을 가질 수 있다. SATA (Serial Advanced Technology Attachment) 규격은 보통 디스크당 15개의 partition을 가질 수 있는데, 방금전에 소개했다시피 4개의 partition은 primary 혹은 extended partition으로 구성할 수 있고, 이후의 partition은 logical partition으로 생성된다. 사실 이런 규약이 상관이 없는게 하나의 primary partition은 여..
한번 kernel build를 해보면 알겠지만, kernel쪽 driver폴더를 살펴보면 그 종류가 어마어마하게 많은 것을 알 수 있다. 지금이야 더 많겠지만, kernel 2.4에서의 driver는 약 15000~20000개 정도였다고 한다. 물론 아주 일반적인 driver는 kernel에 포함되어 있겠지만, 그게 아니라면 15000여개라는 숫자는 한꺼번에 담기에는 조금 큰 숫자이다. 물론 이렇게 사이즈가 커버리면 리눅스가 추구하는 Portability, 특히 embedded Linux같은 경우는 큰 영향을 받는다. 따라서 driver는 보통 아주 필수적인 케이스를 제외하고는 수동적으로 선택되며, 자칫하다가는 오류를 야기할 수도 있다. 이러한 목적에서 udev라는 것이 나왔다. udev를 사용하면 de..
Windows에서는 Device Driver를 일종의 Installer를 통해서 설치하고 등록하는데, Linux에서는 보통 udev(user device) 라는 툴을 사용한다. 이걸 사용하면 Device node가 자동으로 생성되어 application이나 OS 등과 데이터를 주고 받을 수 있게 된다. 우선 Device Node라는 것은 일종의 contact point? 접점과 같은 것이다. 여기서 노란색으로 표현된게 Character device와 block device인데, 이건 system call이라고 불리는 일종의 Virtual file system 상을 통해 User level의 application과 데이터를 주고 받는데, 참고로 network device는 이런 file system을 거쳐..
kernel에서 module은 광범위하게 쓰인다. 아마 대다수가 device driver로 동작하는 형태일 것이고, 드물게는 network protocol이나 filesystem을 지원하는데도 쓰일 것이다. module형태를 취함으로써 가질수 있는 이점은 flexibility가 좋기도 하고, 뭔가 시스템 내에서 변화를 추구할 때 쉽게 반영하고 그 결과를 확인할 수 있는 점일 것이다. module과 관련하여 Linux에서 제공하는 utility는 다음과 같다.- lsmod : load되어 있는 module들을 보여준다.- insmod : Insert module. 말그대로 module를 load시켜준다.- rmmod : remove module. 말그대로 module를 제거해준다.- modprobe : m..
/lib 보통 프로그램이 있으면 프로그램이 독립적으로 실행되는 경우도 있지만, 외부 library와의 link를 통해서 API나 기능을 제공받는 프로그램도 존재한다. 이때 외부 library들은 보통 이 폴더에 저장되고 실행 프로그램은 앞에서 소개했던 /bin이나 /sbin에 저장된다. 결국 /bin이나 /sbin에 있는 binrary들이 실행되는데 필요한 library들이 저장되는 폴더라고 보면 될듯하다. 일반적으로 booting이나 filesystem상에서 실행되는데 필요한 명령어들을 제공하기도 하고, 뭔가의 graphical feature를 제공하는 library도 들어있다. 이 밖에도 device driver같이 loadable module 같은 경우는 /lib/modules 하위에 저장되기도 한..
2016/04/25 - [About Study/Linux] - [Linux] Filesystem Hierarachy Standard(FHS) 이전 글에서 다뤘던 FHS의 구성 폴더와 그 목적에 대해서 조금더 다뤄보고자 한다. / (or /root) root partition, 혹은 root directory는 시스템이 booting하는데 필요한 필수적인 utility들을 가지고 있어야 하며, 정상적으로 부팅이 된 이후에는 하위 directory나 partition들을 mount시켜야 한다. 그렇기 때문에 여기에는 앞에서 이야기 했던 utility들, booting시 필요한 configuration 파일들, 또한 이미지를 일정한 memory address에 load시켜주는 bootloader 같은 star..
- Total
- Today
- Yesterday
- 딥러닝
- dynamic programming
- Expression Blend 4
- processing
- Off-policy
- TensorFlow Lite
- 강화학습
- Windows Phone 7
- ai
- Kinect
- Distribution
- Kinect SDK
- 파이썬
- PowerPoint
- Offline RL
- Gan
- Kinect for windows
- End-To-End
- ColorStream
- bias
- reward
- Policy Gradient
- 한빛미디어
- arduino
- RL
- windows 8
- Variance
- SketchFlow
- DepthStream
- Pipeline
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |