Run if you want it
300x250

Embedded System 11

UART

정의 UART는 Universal Asynchronous Receiver/Transmitter(범용 비동기 송수신기)의 약자로서 두 device간 serial data를 교환할 때 사용하는 protocol을 의미함. Data Frame 단방향(Simplex) 통신, 반 이중(Half-duplex) 통신, 전 이중(Full-duplex) 통신을 지원하며, data는 frame 형태로 전송됨 RX: serial 형태의 data를 parallel하게 convesion TX: parallel 형태의 data를 serial하게 convesion Baud Rate RX / TX가 clk을 공유하지 않기 때문에 양측에 동일한 Baud Rate를 설정하므로서 데이터 전송 속도를 정함.

Xen Hypervisor

Bare metal 구조(Type I)의 Hypervisor로서 기본적으로 반가상화를 통해 VMs은 Hypervisor Call을 통해 H/W resource에 대해 요청 함. Xen에는 Domain 0라고 하는 실제 device와 통신하는 driver가 있고, 각 도메인 Domain U(Unpriviledge)들을 관리하며 Dom u에 대한 요청을 처리 함. 동작에 대해 살펴보면 각 Dom U에서 H/W에 대한 요청을 Hypervisor Call을 통해 요청하면, Hypervisor는 Dom 0에게 전달하여 driver를 통해 실제 device에 접근

Assembly syntax

Assembly syntax ARM Assembly Language 관련 syntax에 대해서 정리한 글 Assembly Identifiers .section , "" 섹션을 정의 .balign n 다음 주소가 n바이트 단위로 alignment .global .global 키워드를 사용하여 전역화 label without branch instruction 하기와 같이 예제코드에서 분기문이 없거나, 분기문이 실행되지 않는다면 순차적으로 다음 코드로 넘어감. # example 1: 해당 예제의 경우 1번째 분기문에서 case1으로 분기되지 않은 경우 순차적으로 다음 code인 "add $s2, $s0, $s1 "로 진행 beq $s0, $s1, case1 add $s2, $s0, $s1 case1: sub ..

가상화(Virtualization)

하나의 H/W system에 다수의 Virtual Machine(OS)이 동작할 수 있게 하는 기술로서 가상화 방식에 따라 크게 두 가지 방식으로 분류 됨. 하이퍼바이저 가상화(Type I) 호스트 OS가 필요 없이 직접 H/W에 Hypervisor를 설치하여 Guest OS를 관리하고 구동 시키는 방식(Bare metal 가상화). 각 Guest OS는 Hypervisor와의 통신을 위해 수정된 코드를 구현해야 반가상화 / 전가상화로 더욱 세분화. 호스트 가상화(Type II) Host OS 위에 가상화 소프트웨어를 통해 Guest OS가 구동되는 방식(e.g Windows OS에 설치해서 사용하는 Virtaul Box등) VM의 H/W resource 관련 I/O 요청이 반드시 호스트 OS를 통해야 ..

U-boot command

U-boot가 부팅하고 나면 커널 부팅 외에도 다양한 service를 제공한다. 이를 CLI기반으로 command를 통해 실행할 수 있다. Kernel booting 관련 command U-boot에서 kernel 부팅 시 'bootargs' 라는 변수의 값 전달하여 linux kernel 부팅 Ex) CONFIG_BOOTARGS="console=ttyAMA0,115200n8 rootfstype=ramfs rdinit=/linuxrc root=/dev/ram0 rw rootwait" U-boot 부팅 관련 variable: u-boot에서 부팅 시, image들에 대한 memory 위치 정보를 하기 table의 변수를 통해 제공 ex) fdt_addr_r은 fdt가 load될 RAM 위치를 제공하고, f..

U-Boot Sequence 및 구조 분석

u-boot의 entry point는 ENTRY(_start)로 기재한 것처럼 start.S파일의 _start이다. 해당 시퀀스에서는 reset을 통해, vector table을 세팅하고(세팅 전 boot params 저장), lowlevel_init 등을 수행하고 _main으로 jump. _main는 crt0.S에 작성되어 있는데 crt0.S의 목적은 C언어로 작성된 프로그램의 메인 함수를 호출하기 전에 필요한 초기화를 수행하는 루틴의 집합(crt == c runtime) 크게 board_init_f(), relocate_code(), board_init_r()로 나뉘어 수행한다. board_init_f() board_init_f() 호출 전에 stack address 및 gd(global data)에..

Bootloader(U-Boot) Overview

개요 전원 인가 시, 내부 ROM이 실행되어 Operation Mode에 맞게 Bootloader를 sram에 loading하고 실행되어 cpu 및 memory, hw 초기화 등을 수행하고 OS를 DRAM에 load하고 제어권을 넘기는 프로그램. U-boot 임베디드 장치에서 장치의 운영 체제 커널을 부팅하기 위한 지침을 패키징하는 데 사용되는 오픈 소스 기본 bootloader. ARM processor 기반 & 임베디드 Linux 시스템 경우 주로 u-boot를 사용 u-boot를 기반으로 자신의 system or board에 맞게 porting을 진행 directory 구성 arch: 주로 architecture에 dependency가 있는 code, start.S 코드가 위치 board: 보드 관..

0. 공부를 시작하며...

해당 도서를 가지고 공부를 하기 전 공부하는 이유와 마음가짐에 대하여 끄적여보려고 한다. 이직 23년에 들어서면서 이직을 마음먹고, 이직을 하게되었다. 물론 연봉이나 좀 더 나은 환경을 원했던 것도 있지만 업무적, 커리어 적으로 발전이 필요하고 원했던 시점이었다. 이직하기 전 업무는 주로 HAL단과 SDK platform 일을 하다가 좀 더 H/W, SoC와 가까운 커널에 대한 업무를 하고 싶었다. 출근 첫 주 원래 하던거보다 한 단계 아랫단인 커널을 주 업무로 하여금 일을 할 줄 알았는데, 첫 출근하여 일주일 정도 업무 파악을 해보니, 좀 더 core하고 h/w적인 펌웨어 업무를 한다는 것을 알게되었다.(학생 때 좋아했던 마이컴 수업이 생각나는...!) 물론 학생때 마이크로프로세서 수업과, 이전 회사에..

[func] read

쉘 스크립트에서 read 명령을 사용하면 사용자 입력을 읽어올 수 있다. #!/bin/bash age=0 read -p "나이를 입력하세요: " -t 4 age echo "$age 살 입니다." 위의 예제를 살펴보면 -p 옵션의 경우 read의 입력할때 프롬프트 창에 띄울 문자열을 사용한다는 것이다. 위와 같이 입력에 대한 설명 등을 기재할 수 있다. -t옵션의 경우 뒤에 오는 숫자만큼 입력을 대기한다. 위의 예제의 경우 4초를 기다린다는 뜻이다. read 옵션 -t [seconds]: seconds 만큼 입력대기 -s: 시크릿 모드, 입력시 입력한 문자가 출력되지않는다. -n [num]: num만큼 입력 받는다. -r: 백슬래시(\) 기호를 이스케이프 문자로 인식하지 않는다.

728x90