본문 바로가기

전체 글377

임베디드 리눅스 그리고 부트로더 그리고 u-boot ※ 엄청 예전에 교육들은거 기억나는대로 대강 쓴거라 틀리고 부정확한 내용이 많은듯. 나중에 공부해서 내용 보강 필요. 우선은 대강 개요만 적어놓기 임베디드 리눅스 SW가 실행될 타겟보드가 있다. 이 SW가 타겟보드에서 실행되려면 이 SW가 타겟보드의 Flash 에 Flashing이 되어있어야 한다. 타겟보드에 JTAG이 있다면 JTAG을 이용해서 Flashing을 하면 될 것이다. JTAG이 없는 경우 취할 수 있는 방법중에 부트로더를 사용하는 방법이 있다. 부트로더도 종류가 많은데 유명한 것중 하나가 U-Boot 이다. (부트로더 SW이름임) U-Boot를 사용해서 타겟보드에 리눅스 SW를 Flashing 할 수 있다. 근데 생각해보면 U-Boot도 SW 니까, U-Boot가 타겟보드에서 실행되려면 U.. 2021. 11. 25.
빌드.컴파일 그리고 makefile에 대하여 make 파일의 개요 리눅스 gcc에 대하여 1 (tistory.com)에서 gcc의 개념에 대해서 간략하게 알아보았다. gcc는 컴파일러 중 하나라고 하였다. 그래서 위 글에서 설명하는 내용은 사실 gcc에만 해당되는건 아니고 대부분의 다른컴파일러도 사용방법이 비슷하다. 근데 빌드해야 할 소스코드의 갯수가 몇 개 없을 때는 앞에서 말한것처럼 타이핑 해서 컴파일 하면되는데 프로젝트가 방대해지면 빌드 할 때 마다 이렇게 일일이 cmd에 명령을 쳐서 빌드하기가 어려워진다. 그래서 빌드와 관련된 이런저런 옵션,셋팅과 관련된 내용을 makefile 이라는 파일에 미리 작성해놓으면 일일이 cmd 창에 "gcc ... 어쩌구" 명령을 칠 필요가 없게 된다. 대신에 그냥 make 라는 명령만 실행하면 makefile.. 2021. 11. 25.
사고시 견인차량(렉카) 관련 도움되는 상식 20년 7월부터 견인차(렉카차)가 견인 할 때는 서면으로 구난동의서를 사전에 작성해야지만 견인이 가능하다. 이때 예상 비용도 사전에 설명이 되야한다. 이를 통해 마음대로 견인해놓고 바가지 비용 청구하는 것은 위법이다. 위반시 해당 영업자는 10일 영업정지이다. 따라서 별도의 서류작성 없이 내 차를 맘대로 견인하면 이는 불법이다. 또한 국토부에서 표준운임료를 배포하여 바가지 가격을 방지하고있다. 구난형 특수자동차 운임.요금표 (2020.10.01 시행) 해당 문서는 11page 인데 찬찬히 읽어보면 된다. 주요사항만 여기 적어보면 1. 본 표준요금 초과하여 부당한 금액을 받을 경우 해당 운송사업자가 사업자등록된 관할지역의 관청에 신고하여 구제가 가능하다. 2. 비용은 대강 아래와 같이 구성된다. 또한 기본.. 2021. 11. 21.
찐 후기.알뜰요금제 6개월 사용후기.핀다이렉트샵 / 가성비충 결론만 먼저 말하자면 매우 대만족이다. 평소에 멤버십 할인을 많이받거나, 가족결합할인 인터넷결합할인 등의 특별한 이유가 없다면 알뜰요금제를 안 쓸 이유가 없다고 생각된다. 내가 알뜰요금제를 그동안 사용하지 않았던 이유는 통화품질에 문제가 있거나 인터넷이 느리다거나 하는 등의 문제가 분명히 있을거라고 생각했기 때문이다. 싼게 비지떡이라고 싼 이유가 분명히 있을거라고 생각했다. 그러나 일단 현재까지 6개월간 쓰면서 사용상의 문제가 생긴적이 전혀 없고 평소에 사용해오던 SKT 통신사랑 다를게 전혀 없다. 멤버십 할인이 없긴 하지만 나는 멤버십 할인은 원래 거의 안썼고 대신 통신료가 반이기 때문에 안 쓸이유가 없다.(게다가 약정도 없음) 필자의 경우 가족들에게도 모두 알뜰요금제를 추천하는 중이다. 게다가 알뜰요.. 2021. 11. 20.
PyQt . Qcombobox 위 그림과 같은 창을 ComboBox라고 부른다. 아래 예시코드. 아래 예시에 있는거 외에도 여러가지 메소드가 있는데 궁금하면 직접 찾아보자. import sys from PyQt5.QtWidgets import * class MyWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Test") self.setGeometry(1000, 200, 700, 300) self.combo = QComboBox(self) self.combo.addItem("Text1") self.combo.addItem("Text2") self.combo.addItem("Text3") # 콤보박스에 선택된 인데스 달라지면 실행되는 func.. 2021. 11. 16.
PyQt.마우스이벤트 pyautogui 마우스제어 PyQt는 아니고 pyautogui라는걸 사용해서 마우스 이동,클릭 등의 제어를 해보자. pyautogui 모듈을 설치하자 pip install pyautogui 상세하게 알고 싶으면 pa 라이브러리 정의돼있는 파일 뜯어서 보면된다. 예시코드 참고 import pyautogui as pa #현재 마우스 좌표 출력 print(pa.position()) print(pa.position().x) print(pa.position().y) #마우스 이동(절대값 위치로 이동) pa.moveTo(100,400) #마우스 이동(현재위치에서 상대적으로 이동) pa.move(100,400) """마우스 클릭 관련 API 원형""" # def click # ( x=None, y=None, clicks=1, interval=.. 2021. 11. 16.
운영체제 로더의 개념 컴파일.링킹을 통해 만들어진 exe 파일은 하드디스크에 파일형태로 저장된다. 이 exe 파일이 실제로 cpu에 의해 실행이 되려면 파일의 내용이 메모리에 적재되야한다. 디스크에 저장된 exe 파일을 유저가 실행했을 때 파일의 내용을 메모리에 옮겨담는 역할을 하는 것이 로더이다. 이러한 로더가 윈도우와 같은 운영체제에 구현되어 동작되고 있는 것이다. 한편, 로더가 sw를 메모리에 적재하는 기법은 다양한 기법이 존재한다. 이때 가장 핵심이 되는 내용은 sw 내에서 (프로세스에서) 정의되어 있는 메모리주소를 어떻게 실제 컴퓨터의 HW 메모리주소에 매핑할 것인가? 이다. 다른 글에서 말했듯이 sw는 sw 별로 각자 독립적인 4Gbyte의 주소공간을 갖고 있고 그 주소를 바탕으로 기계어가 코딩되어있다. 그러나 로.. 2021. 11. 14.
가상 주소공간(virtual address space) 32bit 아키텍쳐의 컴퓨터에서 하나의 Sw는 각각 4Gbyte의 메모리 공간을 할당 받는다. (왜냐면 2^32 가 4Gbyte 이기 때문) 이 4GByte의 메모리 공간을 가상주소공간이라고 부르는데, 그 이유는 이것은 각각의 sw마다 독립적으로 갖고 있는 주소공간이기 때문이다. 또한, 해당 프로그램이 실제로 메모리에 올라가서(로드되서) 실행될 때, sw 코드상에 정의된 메모리주소와 실제 메모리 물리주소가 다르기 때문에 이것을 가상주소공간이라고 부른다. (참고로 윈도,리눅스 등 로더를 사용한 멀티프로세싱이 가능한 운영체제를 갖지 않는, 오직 하나의 exe 파일만이 실행되는 임베디드 sw코드의 경우. 코드에 정의된 메모리주소와 실제 메모리 주소 영역이 완전히 동일하게 된다.) 예를 들어 test1.exe .. 2021. 11. 14.
dll (다이나믹 링킹 라이브러리) 개념 앞에서 빌드의 개념을 설명할 때. 라이브러리 파일도 링킹 단계에서 함께 링크되어야한다고 했다. 근데 다이나믹 링킹이 뭐냐면 exe 파일을 만드는 단계에서 라이브러리 파일을 링크하는게 아니라 exe 파일이 실행되서 해당 라이브러리를 런타임에 실제로 '호출'할 때 가져다 쓰겠다는 소리이다. 무슨말이냐면 test1.c - > test1.exe test2.c -> test2.exe 두개의 서로 다른 exe 파일을 만드는 상황. 이때 두개의 파일은 모두 printf 라는 라이브러리를 사용한다. printf를 사용하기 위해서는 링크단계에서 해당 라이브러리가 함께 링크되야한다. 그래서 test1.exe와 test2.exe는 내부에 각각 printf 라이브러리를 갖게 된다. 이때 한 컴퓨터에서 test1.exe와 te.. 2021. 11. 14.