ubuntu 20.04로 가상환경을 셋팅하겠다. 리눅스 배포판 ubuntu라는 리눅스 배포판을 쓰는 이유 서버용으로는 레드햇이나 센토스 같은 배포판을 많이 쓰고, 개발용으로는 우분투를 많이 쓰게 되었다. 개발용으로 우분투를 많이 쓰게 된 이유는 안드로이드 개발 환경
이제부터 우리는 커널을 만질거기 때문에, 잘못하면 부팅이 아예 안되는 불상사가 발생할 수 있다. 그래서 우리는 시리얼 케이블을 통해서 현재 잘 동작하고 있는 라즈베리파이 이미지를 백업 받아놓겠다. 문제가 생기면 백업 이미지를 다시 SD카드에 write해서 돌아가겠다는
ios는 사실 리눅스베이스라기보다는 유닉스베이스우리가 쓰는 일반 데스크탑은 컴퓨터를 구성하는 대표적인 요소들인 cpu, memory, hdd같은것들이 다 따로따로 분리되어있다. SoC는 이러한 구성요소들이 하나의 칩 안에 다 들어가 있는 것을 말한다. 우리가 사용하는
/usr/ = unix system resource 수업의 핵심타겟 C 언어 고급&응용 리눅스 개발환경에 익숙해지는 것 sudo halt -- 서버 종료 > 이 명령어는 서버를 종료하는 명령어입니다. >참고로 서버를 종료하는 동일한 명령어를 정리하면 아래와 같다.
유인물 리뷰 /boot/cmdline.txt /boot/cmdline.txt는 부팅할 때 커널에 명령행 arguments로 전달할 텍스트가 적혀있는 파일이다. serial 통신 리뷰 속도인 baud rate가 11520라는 것은 1초에 11520비트를 보낸다는 것이다
stm32 cubeIDE에서 사용했던 API 우리가 그냥 편하게 C 라이브러리 함수 사용하듯이 썼던 HAL function들이, 사실은 어제 우리가 U-Boot를 통해서 레지스터에 값을 써줬던 것들을 전부 미리 구현해놓은 것이었다. ksh advice 시스템 프로그램
실행속도는 32비트 명령어셋이 더 빠르다(pipeline 구성이 용이하기 때문이다). 하지만 그만큼 메모리를 더 많이 먹는다. 모든 ARM명령어는 조건부 실행이 가능하다는 특징이 있다.명령어가 32비트인데 32비트 안에 32비트 주소를 넣는 것이 불가능하기 때문에 Lo
디샘블이라는 것은 기계어를 다시 어셈블리어로 바꾸는 것을 말한다.그래서 우리는 .o 확장자의 오브젝트 파일에 대해서 디샘블을 할 것이다.아래는 디셈블 하는 코드이다. 화면에 출력될 것을 txt 파일로 저장하겠다는 것이다.위 명령어로 생성된 start.txt파일에는 어셈
LED가 좌우로 시프트 하면서 켜졌다 꺼진다. 위 작업은 무한루프로 돌아간다.7번 key를 누르면 무한루프를 탈출하면서 부팅이된다.특정한 비트열을 0으로 만들거나(0을 가지고 and연산) 특정한 비트열이 0인지 조사하고 싶을 때(1을 가지고 and연산), AND을 사용
puts(): putstring 함수는 바이트 단위로 값을 출력하는거기 때문에 아주 가볍다.펌웨어 프로그래밍에서는 디버깅 할 때 말고는 printf()를 사용하면 안된다. printf()는 굉장히 무거운 함수이다. printf()를 추가하는 순간 8kb분량의 코드가 추
ubuntu@ubuntu14:~/pi_bsp/kernel$ sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-devubuntu@ubuntu14:~/pi_bsp/kernel$ git clon
우리가 저번 시간에 부트로드 소스 안에서 하드웨어를 제어해보있다.이제는 커널 소스 안에서 하드웨어를 제어해보고자 하는 것이다.어플리케이션에서 우리가 만든 시스템 콜 함수를 통해서 하드웨어를 제어하는 것이 종국적인 목표이다.1\. 어플리케이션 작성 필요2\. 시스템 콜
bash라는 프로세스가 fork 명령을 통해서 firefox라는 자식 프로세스를 만들면서 웹 브라우저가 실행된다. 위 경우에 firefox는 foreground process로 돌고 있기 때문에 거기다가 다른 명령어를 쳐도 먹지를 않는다.그래서 파이어폭스를 종료해야만
만들 API 목록
리눅스에는 반드시 루트파일 시스템이 필요하다.우리가 리눅스에서 / 라는 경로로 접근하면 보이는 다양한 파일들로 구성된 파일시스템을 말하는 것이다. 리눅스가 부팅이 되어서 로그인이 되고 bash가 하나 할당되고 사용할 수 있게 되는 것까지 가려면, 루트파일 시스템이 무조
임베디드 시스템은 보통 작게 파일시스템을 만든다. 라즈베리파이처럼 파일시스템을 엄청 크게 만들지 않는다. 그래서 우리는 아주 미니멀한 파일시스템을 만들어보는 실습을 해 볼 것이다. 그래서 아래의 빌드 코드를 보면 "bitbake core-image-minimal"라는
call_dev.c 파일을 보면 중간에 구조체가 등장한다. 그 부분을 제대로 이해하기 위한 짧막한 설명이다.struct student의 크기는 8바이트(int 4바이트 + char\* 포인터의 주소 4바이트)이다.선언과 동시에 변수로 선언하는 형태에서는 .멤버명 = 값
윈도우에서는 beyond compare라는 프로그램을 썼었다. 리눅스에도 있다. 바로 meld이다. 심지어 무료 프로그램이다. 사용법은 거의 beyond compare와 같다. GUI가 잘되어있어서 그냥 직관적으로 사용하면 될 듯 하다. 정말 리눅스의 GNU proje
IPC = Inter-Process Communication
MCU는 전원을 확 뽑아버리던가 reset 버튼을 눌러버리면, TCP/IP 흐름제어가 뚝 끊겨버려서 자기가 끊어졌다는 것을 알릴 방법이 없어진다. 그래서 다시 켜서 로그인을 시도해도 "already logined"가 뜨면서 접속이 안된다. 그래서 그러한 경우를 위해 "
디바이스 드라이버는 5-6일정도 수업이 진행될 예정이다.디바이스드라이버의 전제조건이 있다.디바이스드라이버는 커널이 준비되어있어야 한다.타겟보드에 맞는 커널이 준비되어 있어야 한다는 것이다.우리는 직전에 yocto로 이것저것 미니멀한 파일시스템을 설치해놔서 교차개발환경이
![](https://vel
fgets()는 버퍼 단위로 그 크기만큼 읽어오기 때문에 버퍼 오버플로우를 방지할 수 있다. gets()는 버퍼의 사이즈를 넘기지 않고 그 시작 주소만 넘기기 때문에 버퍼 오버플로우가 발생할 수 있다.gets() 함수는 표준 C 라이브러리 함수 중 하나로, C 언어에서
이제부터 진짜 본격적으로 디바이스 드라이버를 만들어보겠다. 디바이스 드라이버의 핵심파트 시작..!
디바이스 드라이버 소스파일 내의 init(), exit(), open(), release() 함수에 대해서 말하는 것이다.먼저 접근 가능한 메모리인지 확인을 해보고 접근을 해야한다. 안그러면 segmentation fault가 나버린다. 가장 fatal한 상황이다. 그
주번호와 부번호
리눅스 운영체제 상에 커널타이머는 100Hz로 설정되어있다.(그래서 f=100HZ인 것이다.) 그러므로 타이머 틱값은 10ms마다 1씩 증가한다.(T=1/100=10ms) 그래서 우리는 이 타이머를 이용하여 1초마다 타이머 인터럽트가 발생하기를 기대하고 있는 것이다
수요일 오후에 시험보고 끝낸다.ch10~14까지의 내용(ioctl, kerneltimer, interrupt, blockio, poll)으로 헤더파일에 새로운 명령어를 만들어서 ioctl()로 커맨드를 전달하는 문제가 나올 것이다.close()할때만 del_timer
CPU를 100%나 점유하고 있는 현재의 구조를 개선해야 한다. 대기큐를 > 내 능력을 발휘하면서 성장할 수 있는 곳을 찾았다. 내가 한번 성과를 내보겠다. 이 직무를 얼마나 하고 싶은가. > 다른 사람을 위해 주석도 열심히 달고, 게임을 해도 항상 서포터를 해왔다
우리가 만든 디바이스 드라이버를 커널에 포함시켜서 배포해보자.p432_ledkey_poll을 커널에 포함시켜보겠다.디바이스 드라이버를 자동으로 적재하는 방법을 적용해보겠다.내가 사용하지도 않는 디바이스 드라이버가 항상 적재가 되어있는것도 곤란하다. 부팅하면서 컴퓨터에
우선 앞전 실습에서 설정한 빌트인 메뉴를 해제해 줘야 한다.이 메뉴를 \*에서 M(모듈)로 수정한다. 그러면 이제 우리의 디바이스 드라이버 소스가 빌트인이 아닌 모듈로 컴파일 되는 것이다.모듈을 컴파일 하고 싶으면 build할 때 modules를 줘야한다. 원래는 모듈
그동안 내가 설정했던 .config가 사라지면 안되기 때문에 백업을 받아놓겠다.현재 리눅스 커널 폴더의 용량은 무려 3.4G이다.우선 clean을 하겠다. clean을 하면 .o 오브젝트 파일을 전부 지운다. 설정 파일도 전부 지워준다.이제 압축해준다.이렇게 압축된 파