본문 바로가기

전체 글

(35)
오디오 DAC 와 Headphone 앰프 출력 이용 (ALSA) Allwinner S3 Audio 출력장치를 이용해 보자. 사용 가능한 오디오 출력 장치를 확인해 본다. # aplay -l **** List of PLAYBACK Hardware Devices **** card 0: Codec [V3s Audio Codec], device 0: CDC PCM Codec-0 [CDC PCM Codec-0] Subdevices: 1/1 Subdevice #0: subdevice #0 alsamixer를 실행하면 아래와 같은 설정 화면이 나온다. 참고로 이 화면은 fbdump package를 추가하고 "fbdump -fb /dev/fb0 >out1.ppm 명령으로 캡쳐한 화면이다. PPM파일을 PC로 전송하여 PNG 포맷으로 변경하였다. 컨트롤 바의 하단에 "MM"이라는 표..
SD-card 메모리 맵 SD 카드의 sector map을 정리해 보자. Buildroot 기준으로 표를 만들었으나 Ubuntu 및 Debian의 경우에도 거의 동일하다. u-boot에 LCD 디스플레이 이미지를 1024x600 LCD 해상도에 꽉 차게 비트맵을 추가하니 u-boot의 binary 크기가 1MB에 육박한다. 1024 x 600 x 1 Byte로 계산하면 딱 600KB이고 기존 u-boot의 크기가 400KB가 조금 안되는 크기였다. Items Size Sector # (From) Sector# (To) File name Partition name (size) MBR 512Byte 0 0 u-boot (2MB) Reserved 7.5KB 1 15 SPL 32KB 16 79 u-boot-spl.bin U-boot 1..
쾌속 임베디드 리눅스 부팅 4차 도전 부팅 속도 최적화라는 공부를 시작한지 어느덧 3일이 지났다. 리눅스 커널과 init에 대한 아주 얄팍한 지식으로 무식하게 진행하고 있으나, 좌충우돌하면서 하나하나 배우는 재미가 쏠쏠하다. 초단위로 적당히 단축을 하다가 어느던 ~100msec 단위에서 최적화를 보고 있다. 다시 힘차게 4일차 아침을 시작해 보자. 오늘도 시간과의 싸움이다. 비교적 간단한 커널관련 작업으로 부팅시간이 많이 줄었으나, 아직 해볼만한 것들이 남아있는지 프로파일링을 해보자. 커널 설정은 변경없이 bootcmd만 수정하여 bootargs에 "initcall_debug printk.time=1"만 추가하였다. 보드를 부팅하고 command line에서 dmesg > kernel.log로 커널 메시지를 저장하였다. 커널 로그 파일은 아..
쾌속 부팅 3차 도전 오늘의 부팅속도 목표는 5.5초에서 4.9초 미만으로 줄이는 것이다. 시리얼 콘솔로만 분석할때에는 init에서 ffmpeg 어플리케이션이 시작할때까지 약 1.3초가 걸리는 것으로 보인다. 5.49 - 4.14 = 1.3초 [4.141249 0.009120] [ 2.243069] Run /sbin/bootchartd as init process [4.282580 0.141331] [ 2.384207] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null) [4.341134 0.058554] App Starting.. [4.365064 0.023930] App Started.. [4.407797 0.042733] [ 2.509193] usb 1-1: new high-speed US..
쾌속 부팅 2차 도전 BootChart를 설치하여 "init" 직후에 일어나는 일들을 분석해 보았다. Buildroot 작업 디렉토리에서 make busybox-menuconfig 실행하고 "Init Utilities" 메뉴에서 "bootchartd"를 선택하면 된다. Pinchzoom이라는 Qt 어플리케이션은 init 시작 후 약 2.5초 후에 구동을 시작하는것으로 파악되었다. 그러나 화면이 보일때까지 추가로 2초 정도 더 기다려야 한다. 즉 4.5초 정도의 구동시간이 필요한 것이다. 무엇을 하느라 2.5초씩이나 기다리고 있는것일까? SD 카드 EXT4 파티션 마운팅 시간이 이렇게나 오래걸리나? Qt5와 방대한 과련 라이브러리, 어플리케이션 로딩도 2초 이상 시간이 걸리는 것으로 파악되었다. RNG(Random Number..
쾌속 부팅을 향한 첫 걸음 많은 MCU 펌웨어 개발자들이 임베디드 리눅스 도입을 망설이는 이유가 몇가지 있다. 임베디드 리눅스의 소프트웨어 구조는 복잡하고 어렵다. 툴체인, 커널, 부트로더, 루트파일 시스템 등등 공부할것이 많아 개발하는데 시간이 많이 필요하다. 따라서 전반적인 개발 기간이 길어지고 이에따른 비용이 높아진다는 것에 동의한다. 그런데 화려한 GUI와 함께 유무선 네트웍이 필요하다면, MCU 보다는 리눅스가 동작하는 MPU 기반의 고성능 장치가 필요할 것이다. 임베디드 리눅스를 구성하는 하드웨어가 복잡하고 가격이 높다. CPU는 대부분 BGA 패키지이고, 외부에 DRAM을 추가해 주어야 하고, PMIC도 필요한 경우가 많다. 그러나 800x480 이상의 TFT LCD를 연결하고, 부드럽게 동작하는 GUI를 구현하고 유..
USB 무선랜 드라이버 구동 Mediatek사의 RT5370칩셋이 장착된 USB 무선랜 장치(모듈)는 구하기도 쉽고 가격도 매우 저렴하다. 실제 알리익스프레스에서 $2~$3의 초저가에 무료배송으로 구입할 수 있으니 여유있게 몇개 주문해 놓자. 안테나가 내장된 소형 모듈은 보통 아래와 같은 구조로 되어 있다. 원래 Ralink사에서 만든 칩이지만 2011년에 Ralink는 MediaTek 인수되었다. 시시콜콜한 반도체 회사들의 M&A 이야기를 하는 이유는 디바이스 드라이버의 설명이 Ralink 로 되어 있기 때문이다. 이 무선랜 칩이 사용할 디바이스 드리이버의 이름은 RT2X00이다. 무선랜 관련 드라이버는 Built-in으로 설정하면 정상동작하지 않는다. 무선랜 칩셋이 필요로하는 바이너리 펌웨어 파일이 루트파일 시스템에 존재하는데,..
SPI 포트 기능 테스트 Allwinner S3/i3에는 SPI 통신 장치가 포함되어 있으며 출력과 입력 포트에 각각 64바이트의 송수신 FIFO 버퍼가 있다. UART와는 다르게 CLOCK신호에 동기되어 데이터 송수신이 가능하므로 빠르고 신뢰도가 높은 장치간의 통신을 구현할 수 있다. 고속으로 많은 데이터 통신이 필요한 복잡한 센서나 소형 컬러 TFT LCD를 구동하는데 많이 사용된다. SPI 포트는 MOSI(Master Out Slave In) 데이터 출력, MISO(Master In Slave Out) 데이터 입력, MCLK(Master Clock) 클럭 출력이 있다. 추가로 Slave의 Chip-select를 SS(Slave Select) 출력신호가 있다. CLOCK의 위상과 데이터 동기를 상승 시점이냐 하강 시점에 따라..