OS 기초 이론
·
Linux
흐름 재정리상세한 내용말고, 복습할겸 대표적인 기본 내용만 간결하게 재정리시스템 구조 흐름하드웨어 위에서-> 커널(Kernel) 동작 (하드웨어 직접 제어, 리소스 관리)-> 그 위에서 응용프로그램(User Application) 동작-> 응용프로그램은 시스템 콜(System Call) 통해 커널에 자원 요청커널 모드 / 사용자 모드가 나뉘는 이유 (Why?)커널 보호 - 메모리, 프로세스, I/O를 관리하니까 중요 so 다른 응용프로그램이 이것을 건들면 안됨시스템 전체 안정성 보장잘못된 프로그램이 시스템 전체를 망가뜨리지 않도록-> 사용자 프로그램은 사용자 모드에서 제한적으로 실행됨-> 특권 명령어, I/O 접근, 메모리 접근 제한권한 수준커널 모드 > 사용자 모드(모든 자원 접근 가능 ↔ 제한적 접근..
Rootfs와 Kernel 빌드 (feat Makefile)
·
Linux
RootFileSystemOS에서 필요한 기본 어플리케이션이나 라이브러리 같은 기본 파일들 : 사용자 공간 파일 시스템/에 담기는 기본 파일 (init 프로세스, shell, 라이브러리)init 프로세스리눅스 커널이 가장 먼저 띄우는 1번 프로세스 (PID: 1)루트파일시스템이 준비되면 /sbin/init을 맨 처음 실행함systemd: 가장 유명한 init/etc/systemd/아래의 설정파일들을 읽어서 서비스 실행Ubuntu, fedora등이 사용android init: 안드로이드 initsystemV: 가장 오래된 initshell: shell만 실행할 수 도..커널와 Rootfs는 다름커널: 하드웨어 제어, 프로세스 및 메모리 관리Rootfs: 커널 외부에 존재, 사용자 프로그램 과 설정파일들 포..
Linux개발 환경
·
Linux
Linux 개발 환경Buildsource code -> binary(excutable)Host빌드 진행 환경Target빌드된 바이너리가 동작할 환경타겟마다 바이너리가 다름(C경우 플랫폼 의존성)Toolchain원하는 타겟에 맞춰서 빌드해주는 개발 도구 모음Compiler: 소스코드 -> 바이너리 (.c -> .obj)Library: 함수 모음 (SDK)Linker: .obj들, 라이브러리들을 모아 하나의 바이너리로 결합C 런타임 (CRT, C Runtime)C언어 main에 이르기까지의 초기화 작업OS마다 환경변수, 파라미터 다루는 방식 초기화 방식 등이 다름근데 main()의 형식은 같음 -> 어떻게?C Runtime obj파일이 이런 작업들을 해주고 -> main호출라이브러리개발자가 직접 작성한 함수..
Arm 어셈블리 명령어 간단 소개
·
Linux
어셈블리 명령어 소개 -어셈블리 명령어는 간단 명료하기 때문에, 하나하나보면 이해 어려움 -> 전체적인 흐름을 보자 -calling convention을 알아야함 -레지스터에 대한 기본적인 이해 -- 어셈블리 명령어 기본 포멧 -opcode -: 목적 레지스터(범용 레지스터) Rd -: 1st소스 레지스터(operand 1) Rn -: 2st소스 레지스터(operand 2) Rm if) ADD , , 는 이렇게 표기 = + 기능별 어셈블리 명령어 종류 -데이터 처리 : add, sub, orr, lsl, lsr -메모리 연산 : ldr, str, ldp, stp -조건 분기 : b.cond, cbnz, cbz, tbnz, tbz -분기 : b, bl, ret -익셉션 처리 : svc, hvc, smc, ..
Arm프로세서와 Arm아키텍쳐
·
Linux
시스템 소프트웨어 개발 -페키징 -브링업 -특성 평가 -BSP개발 -System integration -Stress Test 시스템 반도체 핵심은 Arm프로세서 Arm사는 라이센스 비지니스 -파운드리에서는 SoC와 같은 시스템 반도체가 양산 -주요 IP에 대한 라이센스 판매 IP? -지적 재산권의 약자로, 재사용 가능하도록 기능을 모듈화해 설계한 Core Design -Digital IP / Mixed IP --- Arm프로세서는 왜 배워야 하는가? 시스템 반도체(전기 자동차)의 핵심 부품 -대다수 시스템 반도체는 Arm프로세서를 탑재 -인포테인먼트(90%이상) 자율 주행(ADAS 50%이상) IoT 및 임베디드 장치에서 많이 쓰임 -휴대폰 및 디지탈 TV에서 95%이상 -VR/AR 디바이스에서 사용 A..
프로젝트 단계 별 시스템 소프트웨어 개발 과정 정리
·
Linux
타겟 브링업 (보드 브링업, 페리퍼럴 브링업) --- 소스 브링업 1. git을 활용해 SoC벤더나 솔루션 업체로부터 소스 받아옴 -git정보 체크 -빌드 위한 커멘드 문서로 제공 2. 컴파일러 설치 -컴파일러를 직접 빌드 서버에 설치 -컴파일러 에러나 빌드 스크립트 수정(for 시스템 성능 극대화, 커스터마이즈) 3. 소스 빌드 -컴파일 에러 혹은 링크에서 수정, 빌드 스크립트 작성 4. 빌드 아키텍처 분석 5. 이미지 다운로드 툴 분석 -SoC 칩 벤더가 제공하는 다운로드 툴 분석 -Trace32 Uart다운로드 기능 --- 소스 브링업 업무방식 대부분 BSP, 시스템 솦트웨어 개발자가 함 --- 소스 브링업을 위한 스킬 욕토 빌드 시스템 -거의 빌드 프레임웤 표준 -SoC벤더도 욕토에 올려서 전달 ..