고급 개발자로 가는 길
반응형

[Python] 윈도우 환경에 파이썬 설치하기

윈도우에 파이썬 설치하기 https://www.python.org/downloads/ Download Python The official home of the Python Programming Language www.python.org 파이썬 공식 홈페이지 다운로드 페이지에서 윈도우용 파이썬 언어 패키지 다운을 진행 한다. 필자는 python-3.10.2-amd64 버전으로 진행 하였다. install exe 을 실행한 후, Add Python 3.10 to PATH 를 체크한다. "Add Python 3.7 to PATH" 옵션을 누락하면 이후 실습할 때, 오류 발생 할 수 있다. 만약 Python 이 설치되는 경로와 PATH 에 대한 사전 지식이 있는 사용자라면 이 옵션을 생략해도 된다. 아래와 같이..

Python 2022.03.04 0

[Firmware - STM] 링커 스크립트 LD, 심볼 및 map 할당

링커 스크립트(ld)를 통해 원하는 해당 심볼을 특정 sector 영역에 할당 가능하다. 영역 설정 후 빌드하여 링커에 의해 원하는 주소에 적재 되었는지 확인하기 위해서 map 파일의 심볼 주소영역을 확인 또는 Trace32 dump 등으로 확인 해야 한다. 즉, object 인 input file 의 section 을 output file 인 elf 와 map 로 어떻게 진행해야 하는지 memory map 을 어떻게 잡는지에 대하여 스크립트로 설정하는 것이다. RWW 인 Read While Write 라고하여 Partition 이 나누어져 있다. RRW0 의 경우 Security 가 아닌 code data flash 영역이며 RRW1 의 경우 HSM code 관련 RRW2 의 경우 EEPROM 등, R..

STM 2022.03.01 0

[Linux Kernel] 테스크 디스크립터 매크로 함수

매크로 얘기에 앞서, 프로세스 생성 시 copy_process 함수를 통해 최종적으로 task_struct 메모리 영역을 슬럽 캐시를 통해 미리 할당해 놓고, ARMv7 의 경우 mmu에 page 2개로 할당하여 0x2000의 스택 메모리 영역을 할당 받게 된다. 참고로 스택영역은 페이지 사이즈의 2배이다. 실제 소스에서 PAGE_SIZEfiles, 0, nofile, flags); } 실제 위 함수는 프로세스의 파일 디스크립터 할당을 위한 함수로 current 매크로를 통해 files 에 접근해 전달 한다. 실제 전역이나 지역변수로 할당은 안되어 있지만, task_struct * 와 같이 동작하게 된다. 이 밖에도 수 많은 함수에서 current 매크로 확인이 가능하다. 즉, 현재 구동 중인 프로세스의..

Linux Kernel 2022.03.01 0

[Linux Kernel] 스레드 자료구조 thread_info 간단 설명

thread_info 구조체 task_struct 는 프로세스의 속성을 관리하고, thread_info 구조체는 프로세스 실행 동작을 관리한다. 테스크 디스크립터는 프로세스의 공통 속성 정보를 저장하고 관리하는데, 실제 세부 실행 정보를 저장 또는 로딩하는 자료구조로는 thread_info 가 사용 된다. 구조체의 특징으로는 선점 스케줄링 실행 여부 시그널 전달 여부 인터럽트 컨텍스트와 soft irq 상태 휴면 상태로 진입하기 직전 레지스터 세트를 로딩 및 백업 thread_info 구조체는 프로세스 스택의 최상단 주소에 있다. 프로세스 마다 자신의 스택영역이 있으니, 즉, 프로세스 마다 1개의 thread_info 구조체가 있는 것이며, ARM32bit 에서 프로세스 실행되는 스택의 크기는 0x200..

Linux Kernel 2022.02.27 1

[Linux Kernel] 테스크 디스크립터 자료구조

테스크 디스크립터 task_struct 구조체로, 프로세스의 속성 정보를 표현하는 가장 중요한 자료구조이다. TCB Task Control Block 이라고 Context switch 시 TCB 를 참고하여 진행이 된다. TCB 는 프로세스의 정보를 표현하는 자료구조이다. 리눅스 커널에서 프로세스의 정보를 표현하는 자료구조가 바로 테스크 디스크립터 인 것이다. 리눅스 bash 를 통해 입력되는 ps 정보 또한 테스크 디스크립터 필드에 저장 된 값을 읽어서 표현된다. 리눅스 시스템에서 구동중인 프로세스 목록 또한 init_task.tasks 인 연결리스트에 접근해 출력 된다. 그럼 각 중요 항목들을 정리해보면, 프로세스 식별 필드 pid_t pid; 정수형인 프로세스 ID 값인 pid 이다. char co..

Linux Kernel 2022.02.22 0

[C++] vector 컨테이너 구현

C++로 개발 시 에서 자주 활용되는 컨테이너 이기도 하다. 다양한 기능들을 제공하여 배열보다 사용이 매우 편하며, 활용성이 좋다. 사용 예시인 코드를 구현해 보겠다. #include #include using namespace std; int main(void) { vector vecVal; vecVal.push_back(1); vecVal.push_back(3); vecVal.push_back(5); vecVal.push_back(7); vecVal.push_back(9); //vector vecData(5); vector vecData(5, 3); //vecVal.assign(vecData.begin(), vecData.end()); vecVal.assign(5, 4); vector::iterato..

C++ 2022.02.20 0

[C++] set, multiset 컨테이너 구현

set 컨테이너 set 은 기본적으로 less 정렬이 되며, 중복되는 value 가 insert 되면 중복 삽입하지 않음 insert, begin, end, count, find, lower 기능 제공 구현할 내용 간략 set 컨테이너 set, pair 컨테이너 복합 구현 (equal_range 방식) 탐색기능 count, find 구현 iterator 구현 조건자를 통해 key_comp 비교(less, greater 활용) lower_bound, upper_bound 구현 multiset 컨테이너 구현(find count lower, upper, equal) 구현 내용은 아래 소스와 같다. #include #include #include // greater stl 사용시 using namespace s..

C++ 2022.02.20 0

[C++] map, pair 컨테이너 구현

이번 글에서는 map 컨테이너와 pair 컨테이너를 동시에 사용하는 방식을 구현해 볼 것이다. map을 pair 로 구현 map 컨테이너에서 제공하는 lower_bound, upper_bound, find, insert, erase 등 구현 #include #include using namespace std; int main() { map mapData; pair pair_map; pair_map = mapData.insert(pair(0, 50)); pair_map = mapData.insert(pair(1, 51)); pair_map = mapData.insert(pair(2, 52)); pair_map = mapData.insert(pair(2, 53)); if (!pair_map.second) {..

C++ 2022.02.20 0

[C++] pair, multimap, adjacent_find 구현

이번 글에서는 C++ 에서 pair 컨테이너, multimap 컨테이너의 lower_bound, upper_bound 그리고 adjacent_find 에 대해 설명 해 볼 것이며, template 화 하여 함수포인터 및 객체화 방식을 구현해 볼 것이다. pair 의 경우 2가지의 다른 타입 or 같은 타입의 변수를 저장 가능한 컨테이너 multimap 의 경우 2가지의 다른 타입 or 같은 타입의 변수를 저장 가능한 컨테이너 이다. pair 의 집합이라고 봐도 된다. adjacent_find 는 중복되는 값을 빠르게 탐색하여 찾아준다.(template 함수 포인터, 객체화 방식이 존재) 구현 해볼 내용으로는 아래와 같다. 1. lower, upper_bound 구간 검색 2. adjacent_find 사..

C++ 2022.02.20 0

[C++] count, count_if, equal을 위한 template 함수, 함수 포인터, 객체 컨테이너 구현

C++ 에서 컨테이너 구현 방식으로 class 외에도 함수 포인터 방식이 존재한다. count, count_if 를 통해 list 중 find 하는 기능을 함수로 제공한다. count_if 의 경우 컨테이너를 3번째 인자로 전달한다. equal 의 경우 template 함수, 함수 포인터, template 함수 객체화 하여 전달하는 방식을 제공한다. 하여, 위의 내용들을 활용하여 C++ 로 구현을 해보겠다. 그럼 바로 소스를 통해 알아가 보도록 하자. 아래는 필자가 직접 구현한 소스이다. #include #include //#include #include using namespace std; bool(*pCompare)(int, int); template bool Compare(T nVal1) { if ..

C++ 2022.02.20 0

[C++] Compare 컨테이너 구현(vector 활용)

c++ 은 Standard Template Library 에 있는 컨테이너로 사용자가 사용하기 편하게 정의된 class 를 의미한다. 이말은 즉, template 를 통해 연산자 오버로딩 등 다양한 기법들을 개발자 편의대로 사용 할 수 있다. 또한 iterator 를 통해 반복문을 사용 할 수 있다. 이번 글에서는 Compare 하는 기능의 class 를 만들어 template 으로 컨테이너 화 해보겠다. 아래 소스는 필자가 직접 구현한 소스이다. #include #include #include #include using namespace std; template class CCompare { public: bool operator () (T nVal1, T2 nVal2 ) { if (nVal1 < nV..

C++ 2022.02.20 0

[Firmware - RTOS] RTOS 개념, 차이점, 방식

RTOS가 무엇인지, 그리고 왜 쓰는지, 어떻게 쓰는지에 대해 기술해 볼 것이다. 보통은 미사일을 예로 많이드는데 너무 실시간성만 얘기하기 보다는 조금 더 자세히 들여다 볼 것이다. RTOS 는 해당 보드의 지원되는 OS 종류에 따라 동기화 방법이 다르다.(Semaphore / Mutex) RTOS의 이해 Real Time 이란 임의의 정보가 시스템에 입력이 되었을 때, 주어진 시간안에 작업이 완료되어 결과 도출 되는 것을 의미 결국 신속응답 처리를 위해 일반 펌웨어의 main 시퀀스 외에 여러 Task 를 만든다는 것을 의미한다. RTOS 와 Windows or Linux 차이점 RTOS - 자원을 낭비하더라도 작업의 시간 제한을 맞추는데 포커스 Windows or Linux - 자원을 얼마나 공평하게..

RTOS 2022.02.20 0

[Arm 아키텍처] ARM 레지스터 : 스페셜 레지스터

아래는 ARMv8 A 기준 스펙 문서이다. https://developer.arm.com/documentation/ddi0487/latest Documentation – Arm Developer developer.arm.com ARM Register 아래 표는 ARM 아키텍처에서 사용되는 Register 이다. 실제 예전에 히언님의 쓰신 Embedded Recipe 를 보며 도움이 많이 되었던 내용이기도 하다. 아래 내용을 모르면 ARM 에 모른다고 봐도 무방할 정도이다. System and User FIQ Supervisor Avort IRQ 등 각 모드별로 사용 되는 Register 들이 조금씩 다르다. 공통으로 사용되는 Register 가 있는 반면, 그 목적에 맞게 다르게 사용되는 Register..

Arm 아키텍처 2022.02.19 0

[Arm 아키텍처] AAPCS(Calling Convention)

AAPCS(Calling Convention) 을 알아야 하는 이유 프로그래밍의 근본 동작 원리 파악이 가능 실제 Arm 코어는 c 코드가 아니라 어셈블리 명령어를 실행함 대부분 c 코드는 함수로 구성 됨 안정적이고 최적화된 이쁜 코드 작성 할 수 있는 기반 지식 함수에 전달되는 인자의 갯수 프로세스의 스택을 최대한 사용하지 않는 코드 설계를 해야 함 디버깅 실력을 키우고 이는 문제 해결 능력으로 이어짐 스택 오버플로우, 스택 Corruption 콜 스택 복원 objdump 나 trace32 를 통해 어셈블리 영역을 볼 수 있다. 또한, 함수 호출 시 인자의 갯수를 전달 할 수 있는 레지스터는 8개로 한정되어있다. 8개 초과 시 해당 프로세스의 스택영역에 할당하여 컨텍스트 스위칭을 진행하게 된다. 물론 ..

Arm 아키텍처 2022.02.19 0

[Linux Kernel] gcc 컴파일 옵션

gcc 옵션 -v : 컴파일 상태 출력 -O2 : 최적화 레벨 2 적용 -E : 전처리 과정 결과 출력. --save-temps 옵션 사용 추천 -S : cc1으로 전처리된 파일을 어셈블리 파일(.s) 까지만 컴파일 -c : as에 의한 어셈블까지만 수행하고 링크하지 않음 --save-temps : 전처리 파일(*.i) 과 어셈블리 파일(*.s) 를 지우지 않고 현재 디렉토리에 저장 (컴파일 오류 분석용) cpp0 옵션 (전처리기) -I : 헤더 파일 경로 (ex. -I/usr/local/include) -D[매크로]=[값] : #define 매크로 (ex. -DDEBUG, -DPACKAGE=1) -U[매크로] : #undef 매크로 -M : make를 위한 소스 파일의 모든 종속 항목 출력 -MM : ..

Linux Kernel 2022.02.16 0

[Linux Kernel] ftrace 를 통한 유저 레벨 프로세스 분석(POSIX exit 종료 방식)

프로세스 종료 방식 프로세스 종료 방식은 크게 두 가지로 나뉜다. 1, 유저 레벨에서의 Signal 종료 아래 경로 글에서 Signal 방식의 종료에 대하여 ftrace 를 통해 분석하였다. 2022.02.07 - [Embedded/Linux Kernel] - [Linux Kernel] ftrace 를 통한 유저 프로세스 분석 [Linux Kernel] ftrace 를 통한 유저 레벨 프로세스 분석 먼저 유저 프로세스 생성을 위한 raspbian_test.c 파일 이다. #include #include #define PROC_TIMES 500 #define SLEEP_DURATION 3 // second unit int main() { int proc_times = 0; for(proc_times = 0..

Linux Kernel 2022.02.16 0

[Linux Kernel] 프로세스 소멸 과정 소스 분석

프로세스 종료 방식 프로세스 종료 방식은 크게 두 가지로 나뉜다. 1, 유저 프로세스 레벨에서의 Signal 종료 아래 글에서 Signal 방식의 종료에 대하여 ftrace 를 통해 분석하였다. 2022.02.07 - [Embedded/Linux Kernel] - [Linux Kernel] ftrace 를 통한 유저 프로세스 분석 [Linux Kernel] ftrace 를 통한 유저 레벨 프로세스 분석 먼저 유저 프로세스 생성을 위한 raspbian_test.c 파일 이다. #include #include #define PROC_TIMES 500 #define SLEEP_DURATION 3 // second unit int main() { int proc_times = 0; for(proc_times =..

Linux Kernel 2022.02.16 0

[C++] 동적 바인딩 과 정적 바인딩

객체지향 언어에서 빠질 수 없는 동적바인딩 기법에 대해 알아보자. 예시는 C++ 언어로 아주 예전에 ModbusTCP Protocol 을 개발했던 프로젝트로 할 것 이다. git log 를 보니 정확히 금일 날짜 기준 593일 전에 git push 되었다. 소스는 아래경로에 올려 두었다. 필자가 예전에 직접 짠 코드라 프리하게 오픈 가능해서 편하다. https://github.com/Anthony8062/ModbusTcp GitHub - Anthony8062/ModbusTcp: 프로젝트 프로젝트. Contribute to Anthony8062/ModbusTcp development by creating an account on GitHub. github.com 정적 바인딩 정적 바인딩은 컴피일 시점에 그..

C++ 2022.02.14 0

[Trace32] T32 Header 구성품

이전에 사용하던 STM 사 SPC 계열 MCU 수급문제로 인해 MCU 변경이 필요했다. Infineon cypress MCU 를 사용하게 되면서, T32 Header 도 변경이 필요하다. 아래는 새로 구매하게 된 T32 Header 이다. 구성은 아래와 같이 되어있다. software licenses / Debug Cable / Header 이 있다. 아래는 기존에 사용중이였던, STM SPC 계열 T32 기기 풀 셋 이다. 펌웨어 개발 시 디버깅의 모든 것이 가능한 기기이다. 실제 메모리 덤프, 디버깅 그 외 많은 기능들이 제공 된다.

Trace32 2022.02.12 0

[Firmware-모터 제어] 모터 PID 제어

PID 제어란 비례 / 적분 / 미분 제어로서 P I D 의미를 갖는다. 자동제어로 센서로부터 I/O 신호를 읽고 목표치와 비교하며, 운전 등 조작량을 제어하므로써 목표 값에 근사하게 유지하는 방식이다. 즉, 조작량을 비례 한 크기로 제어하는 방식이다. PID 제어를 증명하려면 사실 어렵긴하지만, 이 글에서는 PD제어에 대하여 설명 할 것이다. PD 제어 PD 제어는 Proportional Derivative 제어 (비례 미분 제어) 로서, 아래의 수식을 갖는다. 별칭으로는 폭주하는 제어를 잠재우기 위한 미분제 라고도 하며, 실제로 모터 사용 시 아래와 같이 모듈레이션이 좋지 않은걸 스코프로 측정 할 수 있다. 이러한 경우 모터 구동 시 RPM 이 일정하지 않으며, 소음 등이 정상 제어가 되지 않는다. ..

모터 제어 2022.02.10 2

[Linux Kernel] ftrace 를 통한 유저 레벨 프로세스 분석(Signal 종료 방식)

먼저 유저 프로세스 생성을 위한 raspbian_test.c 파일 이다. #include #include #define PROC_TIMES 500 #define SLEEP_DURATION 3 // second unit int main() { int proc_times = 0; for(proc_times = 0; proc_times < PROC_TIMES; proc_times++) { printf("raspbian tracing \n"); sleep(SLEEP_DURATION); } return 0; } 위의 .c 파일을 빌드 하기 위한 Makefile 이며, make 를 통해 빌드 진행 하여 raspbian_proc 실행 파일 생성 raspbian_proc: raspbian_test.c gcc -o ra..

Linux Kernel 2022.02.07 0

[Linux Kernel] 커널 스레드(프로세스) 생성 과정 소스 분석

systemd 프로세스는 유저 공간에서 생성된 프로세스의 부모 프로세스 역할을 수행한다. 보통은 init 프로세스라 부르기도 한다. 보통 유저 프로세스에서 부모 프로세스가 소멸 되면, init 프로세스가 부모 역할을 수행하게 된다. ps -ejH 프로세스 생성 과정 크게 두가지로 분류 할 수 있다. 1. 유저 레벨에서 생성된 프로세스 라이브러리(GNU C : glibc) 의 도움을 받아 커널에게 프로세스 생성 요청 2. 커널 레벨에서 생성된 프로세스 커널 내부의 kthread_create() 함수를 호출하여 커널 프로세스 생성 대부분 이를 커널 스레드 라고 부른다. 둘의 공통점은 _do_fork() 함수를 호출한다는 점이다. init 프로세스 : 유저 레벨 프로세스 생성 kthreadd 프로세스 : 커널..

Linux Kernel 2022.02.07 0

[Linux Kernel] 커널에서의 프로세스 테스크 스레드 이해

실제로 개발을 하면서 프로세스, 테스크, 스레드 등을 자주 사용 한다. 객체지향인 C++ 에서도 API 에서 제공하는 스레드를 사용하기도 하고 MFC 로 개발할 경우 MFC 에서 제공하는 스레드를 사용하곤 한다. 물론 스레드는 프로세스와 다르게 메모리를 공유하여 컨텍스트 스위칭이 빠른 장점도 있지만, 그 만큼 임계영역을 나누어야 하며, 필자는 실무로 C++ 개발 시 임계영역으로 Critical Secsion 을 사용했었다. 이렇듯, OS 별로 사용 방식이 상이하다. 리눅스에서도 위의 개념이 존재하게 되는데, 유저영역과 커널영역에 따라 나누어진다. 이 글에서는 리눅스 시스템에서의 프로세스에 대하여 알아가 보도록 하자. 프로세스 우선 프로세스는 실제 리눅스 시스템 메모리에서 실행 중인 프로그램을 뜻한다. 리..

Linux Kernel 2022.02.06 0

[Linux Kernel] 커널 디버깅용 Debugfs 드라이버 코드

우선 해당 드라이버 코드는 [LG전자 김동현님]의 코드를 참조한 것이다. 커널 소스를 수정하여 빌드 할 경우, 잘못 오류를 범하게 되면 커널 패닉이나, 시스템 락이 발생하여, 다시 이미지를 라이팅하는 상황이 발생할 수 있다. 그러한 경우를 방지하기 위해 Debugfs 드라이브 코드를 작성하여, 필요시에만 수정된 소스를 커널에 반영하는 방식을 알아 보도록 할 것이다. 먼저 아래 소스를 참고하면 된다. 내용은 간단하다. get, set 을 통해 raspbian_debug_state 전역변수에 값을 쓰고 읽는다. 눈치를 채신분도 계실텐데, 우리는 저 전역변수를 통해 if 문으로 제어 할 것이다. #include #include #include //#include #include #include #include..

Linux Kernel 2022.02.06 0

[시] 조지훈 - 사모

사모 조지훈 사랑을 다해 사랑하였노라고 정작 할 말이 남아 있음을 알았을 때 당신은 이미 남의 사람이 되어 있었다. 불러야 할 뜨거운 노래를 가슴으로 죽이며 당신은 멀리로 잃어지고 있었다. 하마 곱스런 웃음이 사라지기 전 두고두고 아름다운 여인으로 잊어 달라지만 남자에게서 여자란 기쁨 아니면 슬픔 다섯 손가락 끝을 잘라 핏물 오선을 그려 혼자라도 외롭지 않을 밤에 울어보리라 울어서 멍든 눈흘김으로 미워서 미워지도록 사랑하리라 한 잔은 떠나버린 너를 위하여 또 한잔은 너와의 영원한 사랑을 위하여 그리고 또 한 잔은 이미 초라해진 나를 위하여 마지막 한 잔은 미리 알고 정하신 하나님을 위하여

혼자끄적 2022.02.06 0

[시] 이형기 - 낙화

낙화 이형기 가야 할 때가 언제인가를 분명히 알고 가는 이의 뒷모습은 얼마나 아름다운가. 봄 한 철 격정을 인내한 나의 사랑은 지고 있다. 분분한 낙화. 결별이 이룩하는 축복에 싸여 지금은 가야 할 때 무성한 녹음과 그리고 머지않아 열매 맺는 가을을 향하여 나의 청춘은 꽃답게 죽는다. 헤어지자 섬세한 손길을 흔들며 하롱하롱 꽃잎이 지는 어느 날 나의 사랑, 나의 결별 샘터에 물 고이듯 성숙하는 내 영혼의 슬픈 눈 그때가 고점이였으나, 그것을 인지 하지 못한채 하락을 보게되는.. 우상향 중 매도란 쉽지 않다.

혼자끄적 2022.02.06 0

[Trace32] 커맨드 명령어 사용

섹션 정보 보기 symbol.list.section 주소로 코드 정보 파악 symbol.list.line [address] 전역 변수 확인 var.view [전역 변수 이름] var.view %l %t init_thread_union %l : 필드별 주소 정보 %t : 필드 타임 출력 구조체를 주소로 캐스팅 var.view %l %t (struct thread_info*)0x80c00000 어떤 주소든 지정한 구조체로 캐스팅 가능하다. 어셈블리 코드 보기 data.list [address] 주소에 해당하는 어셈블리 코드를 볼 수 있다.

Trace32 2022.02.01 0

[Linux Kernel] ftrace Log 포맷 해석 및 발생 경로 확인

ftrace 에는 크게 4가지 이벤트가 존재한다. sched_switch sched_wakeup irq_handler_entry irq_handler_exit 각 ftrace 이벤트 별로 당연히 발생되는 경로와 이유가 존재한다. 이번 글을 통해 어떻게 해석하고 어떻게 발생되는지를 알아가 보자. ftrace 로그를 분석하기 위해서는 공통 포맷을 알아야 한다. 아래는 sched_switch 로그의 예시이다. 컨텍스트 정보를 자세히 들여다보면, d... 총 4자리로 인터럽트 활성/비활성 여부 선점 스케줄링 설정 여부 인터럽트 컨텍스트 or Soft Irq 컨텍스트 여부 preempt count 값 으로 구성이 되어있다. 즉 Chromium-browse 프로세스에서 CPU2번에 인터럽트는 비활성된 상태이고 94..

Linux Kernel 2022.02.01 0

[Linux Kernel] ftrace 디버깅 사용하기

필자가 사용하는 라즈비안(리눅스) 에서는 ftrace 가 자동으로 설정 되어있다. 기존의 linux 의 경우 arch/arm/configs/bcm2711_defconfig 에 trace 관련 CONFIG_###=y 를 해주면 된다. bcm2711_defconfig 는 커널 빌드 시 사용되는 config 파일이다. 결론은, 라즈비안의 경우 아래 경로를 통해 ftrace 설정파일을 확인 할 수 있다. /sys/kernel/debug/tracing 실제로 수많은 파일이 있지만 정작 자주 사용하는 파일은 많지 않다. 먼저 ftrace 설정하는 방법을 통해 위 디렉터리에 있는 파일이 어떤 기능을 수행하는지 확인 해 볼 것이다. ftrace 설정 자세한 내용은 주석을 달아놨으니 참고 바란다. #!/bin/bash ..

Linux Kernel 2022.02.01 0

[Linux Kernel] objdump 바이너리 유틸리티

objdump 인 바이너리 유틸리티를 다루어 볼 것이다. 바이너리 유틸리티는 오브젝트 포멧의 파일을 조작 할 수 있다. 보통 라이브러리나 elf 형식의 파일을 어셈블리어 or 섹션 정보 등 출력이 가능하다. 아래는 vmlinux 를 vi 에디터로 열었을 때의 상황이다. objdump 를 통해 아래 파일을 분석 해보자 먼저 objdump 의 옵션을 아래와 같이 볼 수 있다. -x 옵션을 통해 섹션 정보 확인이 가능하다. start 어드레스 영역과 아키텍처 정보도 확인 가능하다. objdump -x vmlinux | more 다음은 -d 옵션을 통해 어셈블리어로 확인 가능하다. objdump -d vmlinux | more 하지만 위 처럼 많은부분을 어셈블리어 만으로 보기는 힘들다. 그럴땐 address 로..

Linux Kernel 2022.01.30 0

[Linux Kernel] 전처리 코드 생성 : 특정 전처리 파일 추출

전체 전처리 방식이 궁금하다면 아래 글을 참고하길 바란다. 2022.01.27 - [Embedded/Linux Kernel] - [Linux Kernel] 전처리 코드 생성 : 전체 전처리 파일 추출 [Linux Kernel] 전처리 코드 생성 : 전체 전처리 파일 추출 리눅스 커널은 캡슐화나 다형성 등 객체지향 방식으로 구현이 된 소스들이 많다. 사실 필자는 객체지향 언어를 좋아하다 보니 오히려 편하다. 본론으로 돌아와 그래서 매크로로 구현된 코드가 darkengineer.tistory.com 이 글 에서는 특정 전처리 파일 추출 방법에 대해 설명해 보겠다. 전체 전처리 추출 방식은 많은 메모리를 잡아 먹게 된다. 그리고 빌드를 수시로 해야되는 단점도 존재한다. 그래서 이럴 때 특정 전처리 추출 방식이..

Linux Kernel 2022.01.27 0

[Linux Kernel] 전처리 코드 생성 : 전체 전처리 파일 추출

리눅스 커널은 캡슐화나 다형성 등 객체지향 방식으로 구현이 된 소스들이 많다. 사실 필자는 객체지향 언어를 좋아하다 보니 오히려 편하다. 본론으로 돌아와 그래서 매크로로 구현된 코드가 많다. 이러한 매크로가 소스 분석의 걸림돌로 작용한다. 바로 전처리 코드는 이러한 매크로를 모두 풀어서 표현을 한다. 즉, 편하게 소스코드를 분석 할 수 있게 된다. 전처리 코드는 GCC 컴파일 오브젝트 생성 과정에서 추출된다. 커널에서 전처리 코드를 추출 하는 방법은 크게 두 가지 이다. 전체 전처리 파일 추출 특정 전처리 파일 추출 이 글에서는 전체 전처리 파일 추출하는 방법을 알아보도록 하자. 전체 전처리 파일 추출 방법 Makefile 에 '-save-temps=obj \' 구문 추가가 필요하다. 아래 500번 라인..

Linux Kernel 2022.01.27 0

[Raspberry Pi] 라즈베리파이 Username 'pi' 변경 하기

라즈베리파이 경우 pi raspberrypi 라는 id 와 password 를 기본으로 갖게 된다. 보안향상을 위해 변경해보자. password 는 sudo raspㅑ-config 에서 쉽게 변경 가능하다. 새로운 계정 추가 먼저 새로 만들 계정을 추가해야 한다. //명령어 순서는 다음과 같다. sudo su adduser devk //useradd 도 사용가능 예시는 아래와 같다. 생성 후 해당 계정으로 진입 하여 root 계정으로 전환 시 아래와 같은 메세지를 볼 수 있다. 원인은 root 사용자정보에 새 계정이 추가가 안되어있어 접근이 안되는 것이다. 사용자계정에 새 계정 추가 아래와 같이 명령어를 진행한다. //root 모드로 접근 후 sudo pi sudo su vi /etc/sudoers 아래..

Raspberry Pi 2022.01.26 0

[Linux Kernel] 리눅스 커널 빌드 flex, bison 오류 해결하기

커널 빌드를 진행 하면 아래와 같은 Error 를 보는 경우가 있다. 원인은 flex 와 bison 패키지 설치가 안되어 있어서 이다. 리눅스에서는 gcc 컴파일러를 사용하는데, 바로 gcc에서 flex 와 bison을 사용하기 때문이다. 아래 명령어로 패키지 설치를 진행한다. sudo apt-get install flex sudo apt-get install bison 진행 후 커널 빌드를 진행하면 해당 문제가 해결되는 것을 확인 할 수 있다.

Linux Kernel 2022.01.25 0

콕스 CK87 황축 텐키리스 네이비 기계식 키보드

집에서 간단하게 사용할 수 있는 기계식 키보드를 마련해보았다. 바로 콕스 CK87 로 가성비 갑 제품으로 유명한 모델이다. 바로 황축으로 주문을 해보았다. 색상은 심플한걸 좋아해서 네이비로 주문 박스는 아래와 같이 생겼는데 박스 상태가 딱 저렴하다. 5만원 값 박스를 열면 아래처럼 포장이 되어있다. 구성은 키보드와 청소를 할 수있는 브러쉬? 그리고 스탭스컬쳐, 스틸리무버가 있다. USB 삽입부분에는 금도금 처리 되어있다. 황축인걸 확인하고 키캡이 깨져있는게 많다고 하던데 다행히 받은 제품은 문제가 없었다. 아래와 같이 LED 등 여러 기능을 조작할 수 있다. 실제로 LED 가 큰 메리트는 아닌거 같다. 타이핑했을때 가격대비는 괜찮지만.. 확실히 철소리가 살짝 들려오기는 하고 딱 5만원 짜리대비 가성비 괜..

기타 2022.01.25 0

[Firmware] Hex, Sre, S19 Format

Bootloader와 App 영역의 sre 포멧을 Merge 해야하는 경우가 생길 수 있다. 공정릴리즈나 업데이트 시 단 하나의 파일로 제공 할 수 있다. 컴파일 설정을 통해 sre, hex, s19 포멧의 데이터를 만들 수 있다. CRT 프로그램 등을 통해 sre 파일에서 s19 파일으 만들 수도 있다. 먼저, SRE Format 은 elf와 같은 binary 를 hex 데이터로 바꾸어 볼 수 있게 만든다. 포멧의 형태는 아래와 같다. Indicate Type Count Address Data CheckSum value S 0~9 n 4, 6, 8 Max. 64Byte Count부터 Data의 모두 더한 값의 1의 보수 character 1 1 2 4~8 2~128 2 Record Description..

Firmware 2022.01.23 0

[Raspberry Pi] 라즈베리파이 라즈비안 커널 이미지 라이팅

커널 빌드를 완료 했다면, 보드에 이미지 라이팅을 해주어야 한다. 아래는 이미지 Sheel Script 이다. #!/bin/bash KERNEL_TOP_PATH="$( cd "$(dirname "$0")" ; pwd -P )" OUTPUT="$KERNEL_TOP_PATH/out" echo "$OUTPUT" cd linux make O=$OUTPUT modules_install cp $OUTPUT/arch/arm/boot/dts/*.dtb /boot/ cp $OUTPUT/arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/ cp $OUTPUT/arch/arm/boot/dts/overlays/README /boot/overlays/ cp $OUTPUT/arch/arm/bo..

Raspberry Pi 2022.01.23 0

[Raspberry Pi] 라즈베리파이 라즈비안 리눅스 커널 빌드

라즈비안 리눅스에서 커널을 빌드 하기 위한 방법이다. 아래 경로를 참고하면 라즈베리파이 공식사이트에서 방법을 제공한다. https://www.raspberrypi.com/documentation/computers/linux_kernel.html Raspberry Pi Documentation - The Linux kernel The official documentation for Raspberry Pi computers and microcontrollers www.raspberrypi.com 공식사이트에서는 커맨드 형식으로 타이핑 해야되서 자주사용하기에는 불편하다. 이럴 경우, 임베디드 개발 시 빌드 쉘 스크립트를 사용하면 된다. 라즈비안 리눅스 커널 코드의 경우, 아래 경로에서 git clone 가능하..

Raspberry Pi 2022.01.21 0

[Raspberry Pi] 라즈베리파이 apt-get update upgrade 문제 해결하기

데비안 계열 패키지를 사용하기 위해서는 업데이트와 업그레이드가 필요하다. sudo apt-get update sudo apt-get upgrade 아래와 같은 문제가 보일 수 있다. 이렇게 되면 정상적으로 패키지 사용이 불가하다. Hit:1 http://archive.raspberrypi.org/debian buster InRelease Get:2 http://raspbian.raspberrypi.org/raspbian buster InRelease [15.0 kB] Reading package lists... Done E: Repository 'http://raspbian.raspberrypi.org/raspbian buster InRelease' changed its 'Suite' value from..

Raspberry Pi 2022.01.20 0

[Raspberry Pi] 라즈베리파이 WiFi 끊김 문제 해결하기 2

2022.01.20 - [Embedded/Raspberry Pi] - [Raspberry Pi] 라즈베리파이 WiFi 끊김 문제 해결하기 [Raspberry Pi] 라즈베리파이 WiFi 끊김 문제 해결하기 라즈베리파이4 Model B 에서도 WiFi 모듈 문제는 여전하다. 여러 커뮤니티 고수분들의 얘기로는 WIFI 모듈 디바이스 드라이버에서 한국쪽 적용에서 버그가 존재한다고 한다. 그래서 해결방법으로는 darkengineer.tistory.com 위의 방법으로 해결이 안된다면, 아래 방법을 진행해 볼 수 있다. 전력 제어를 위해 WiFi 모듈 부팅을 할 수 있으므로, 아니 실제로 한다 주기적으로 sudo iwconfig wlan0 power off 로 WiFi 연결을 끊지 않게 강제로 넣는방법이다. #!..

Raspberry Pi 2022.01.20 0

[Raspberry Pi] 라즈베리파이 WiFi IP 고정으로 사용하기

라즈베리파이에서 WiFi 통신 연결이 가능하다. 아래 경로를 통해 vi 에디터 접속 sudo vi /etc/wpa_supplicant/wpa_supplicant.confp 공유기 or 스마트폰 핫스팟 등 ssid 와 password 정보를 아래와 같이 적는다. ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=GB network={ ssid="devk" psk="********" key_mgmt=WPA-PSK } WiFi 연결 유무를 확인하기 위해 아래 명령어를 진행한다. ifconfig 아래와 같이 wlan0 확인 가능 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0..

Raspberry Pi 2022.01.20 0

[Raspberry Pi] 라즈베리파이 WiFi 끊김 문제 해결하기

가장 좋은 방법은 최신 라즈비안을 설치하는 것이다. 개선이 되어있으므로, 문제 없이 WiFi 끊김없이 동작 되는것을 필자는 확인했다. 라즈베리파이4 Model B 에서 최신 21.10 버전의 라즈비안을 사용하는 경우가 아니고, 훨씬 이전 라즈비안 등 을 사용하는 경우 WiFi 통신 문제가 발생 할 수 있다. 여러 커뮤니티 고수분들의 얘기로는 WIFI 모듈 디바이스 드라이버에서 한국쪽 적용에서 버그가 존재한다고 한다. 혹은 WiFi 모듈을 전력제어를 위해 부팅을 한다고도 하는데, 주기가 너무 짧다.. 전력을 위해서라면 거의 사용하지말라는 수준인데.. 그 결과 SSH 통신이 자주 끊겨 Lan Cable 없이 원격으로 사용하기는 힘들다. 그래도 도전은 해보자. 그래서 해결방법으로는 Github에서 비공식적으로..

Raspberry Pi 2022.01.20 0

[Linux] vim 에디터 설치

보드 초기 셋팅 시 에디터로 쉘 Script 등 여러 Script 를 수정 할 일이 생긴다. 이럴때 vim apt-get 에디터 설치가 안되어있으면, vi, nano 에디터를 사용해야 하며, 키가 basic 상태로 일반 키와 많이 다르다. 물론 basic 상태 hjkl 등을 사용하여 익히는 것도 좋지만, 편리한 방법도 고려해볼 수 있다. 아래 명령어를 진행한다. sudo apt-get update sudo apt-get install vim 아래와 같은 진행이 이루어진다. Get:1 http://archive.raspberrypi.org/debian buster InRelease [32.6 kB] Get:2 http://raspbian.raspberrypi.org/raspbian buster InRele..

Linux 2022.01.20 0

[Linux] Alias 에일리어스 등록하기

처음 보드 등을 설정하게 되면 Alias의 필요성을 가장 느끼게될 것이다. 바로 ll... alias 는 별칭의 뜻으로 재부팅 시 지정해준 별칭을 잃어버리지 않고 기억해두어 다시금 원하는 별칭을 사용할 수 있게 해준다. 아래 경로 접속 시 초기에 되어있는 Alias 등을 확인 할 수 있다. cd /home/pi vi .bashrc 아래와 같이 되어있으며, # 주석 해제 후 사용할 수도 있으며, 추가도 가능하다. 개발을 진행하다보면 길고 많은 명령어를 저장하게 될 것이다. # ~/.bashrc: executed by bash(1) for non-login shells. # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) # ..

Linux 2022.01.20 0

[Raspberry Pi] 라즈비안 이미지 다운로드 및 쓰기

Raspberry Pi 4 Model B 모델에 라즈비안 OS 라이팅을 해보겠다. Raspberry Pi 용 OS 종류는 버전별 종류별로 다양하다. 자기 사용 용도에 맞게 사용하길 바란다. 키오스크 모드용 OS 라이팅은 아래 이전 게시글을 참고하면 된다. 2021.05.09 - [Embedded/Raspberry Pi] - [Raspberry Pi] OS 라이팅 [Raspberry Pi] OS 라이팅 이번에는 Raspberry Pi 에서 사용 할 수 있는 Linux 를 라이팅 하는 방법을 알아보겠다. 필자는 Raspberry Pi 를 통해 키오스크 모드를 사용할 목적으로 키오스크 모드 셋팅이 가능한 버전이 포함된 Linux darkengineer.tistory.com 본격적으로 시작하자면, 우선 라즈베리..

Raspberry Pi 2022.01.18 0

코베아 고스트 플러스 원주 오크글램핑 캠핑장 방문기

어느 덧 겨울이 가까워진 11월 완전 동계 들어가기 전에 캠핑을 가보기로 한다. 강원도 원주에 위치한 원주 오크글램핑 캠핑장이다. 강원 원주시 지정면 송정로 2-1 http://naver.me/xzTqARLG 네이버 지도 오크글램핑캠핑장 map.naver.com 강아지나 아이가 있는 가족단위로 오면 더 좋을거 같은 시설이다. 방방도 있어 아이들이 좋아 할 것 같다. 보시다 싶이 사이트 끼리 서로 간격은 매우 가깝다. 먼저 양념제육으로 시작 그 다음 메인 등갈비를 하기전에 불 만드는 중, 11월이고 강원도라 그런지 기온이 낮다. 한쪽은 매운 양념, 한쪽은 소금 간 등갈비 간단한 소고기와 대하소금 구이로 후식을 즐기고 저녁에 확실히 추웠던 것 같다. 기온이 더 낮아져서 잘때 팬히터로 자서 따뜻하기는 했지만 ..

캠핑이야기 2022.01.18 0

코베아 고스트 플러스 충주 한강 우륵대교 노지 캠핑 방문기

이번엔 충북 충주시 금가면 오석리 501 에 위치한 우륵대교 노지 캠핑 2박 3일 장박을 하게 되었다. 충주에도 서울에서 흐르는 한강이 있는데, 강이 크고 생각보다 더 좋았던거 같다. 사실 노지캠핑은 처음해봤는데, 완전 한여름이 아니라서 괜찮았던 것 같다. 괴산에 있는 오토캠핑 갔을 때 빵구난 텐트를 A/S 마무리 하고 첫 개시 이다. 노지이고 자리 경쟁이 있어서 빨리 갈 수록 좋은자리를 선점 할 수 있다. 친구가 그나마 빨리 가기도 했고.. 늦게 간것 치고는 나쁘지 않았다. 바로 한강 옆 확실이 피칭 실력은 나아졌다. 음 지금 사진으로 보니깐 옆에 라인 삐뚤기는 한데.. 뭐.. 마트에서 저렴하게 산 양장피와 닭강정에 맥주 날이 조금 흐려지기는 했는데, 확실히 핸드폰 카메라다 보니 화면에 다 안담긴다ㅠ ..

캠핑이야기 2022.01.17 0

코베아 고스트 플러스 몽산포 오토캠핑장 방문기

6월 대참사를 겪고난 후 7월 타프와 함께 서해 몽산포 바다 캠핑을 가게되었다. 몽산포 바다 주변에 오토캠핑장이 모여서 잘 되어있다. 아래는 직접 갔었던 오토캠핑장이다. 바다쪽이랑 더 가까운 캠핑장도 있다. http://naver.me/F2vXqetO 몽산포감성캠핑장 : 네이버 방문자리뷰 19 · 블로그리뷰 15 m.place.naver.com 오전에 도착을 해서 타프를 치고 여유있게 맥주 휴식 개인적으로 이런 여유가 좋은거 같다. 잡생각 사라지면서 불멍이랑 비슷하게 TV.. ㅎ 이 때 에스파의 넥스트 레벨 영상을 처음으로 봤는데 노래가 좋았다 ㅎㅎ 삼겹과 버섯으로 시작 술 잘마시는 척하고~ 낮에 바다수영도 했지만 사진이 없어서 아쉽지만 밤에 바다 근처로 가서 물멍한번 해주면서 야식 ㅎ 괜히 센치 해지..

캠핑이야기 2022.01.17 0

코베아 고스트 플러스 괴산 괴강국민여가캠핑장 방문기

충청북도 괴산군 괴산읍 충민로검승3길 10KR 괴강국민여가캠핑장을 가게 되었다. 예약은 아래 사이트에서 가능하다. https://jwyccamp.kr/ 괴강국민여가캠핑장 충청북도 괴산군 괴강 오토 캠핑장,괴강국민여가캠핑장,괴산군국민여가캠핑장,괴산군캠핑장발전협의회,괴산군청,안심캠핑장,물놀이장캠핑장,글램핑,공공야영장,저렴한캠핑장,패트롤캠퍼,관 jwyccamp.kr 두 번째 캠핑으로 21년도 6월에 방문을 하게 되었다. 날이 되게 좋고 하늘도 이쁘고 나도 이쁘ㄱ, 주변 캠핑사이트도 이쁘게 잘 꾸며 놓았다. 처음 피칭보다는 나아지긴 했는데,, 폴대 잘 못 넣다가 옆에 빵꾸 생겼다..... 코베아 A/S 여름이라 개방해도 너무 더웠고.. 결국 타프 필요성을 겁나게 느꼈다. 뒷 모습 너무 이쁘고 피칭하니 배고프고 ..

캠핑이야기 2022.01.17 0

코베아 고스트 플러스 가평 오토캠핑장 방문기

코베아 고스트 플러스 텐트를 구매하고 처음으로 피칭 할 기회가 찾아왔다. 거실이 있는 리빙쉘 텐트를 좋아해서 해당 텐트로 구매를 하게되었다. 목적지는 가평 어딘가.. 사실 기억이 안난다. 아래는 해당 텐트 구매 사이트이다. 필자는 매장에서 구매 시 10% 할인이 되어 매장서 구매를 했었다. https://www.koveashop.co.kr/front/goods/goods-detail?goodsNo=G2101041407_4383 고스트 플러스 www.koveashop.co.kr 첫 피칭이라 모양도 못 잡고 안에는 하수구 까지 있고.. 사진도 못 찍고 어차피 안에서 잠만자는 용도이고, 타프에서 음식 먹을거라 안에는 못 찍었다..ㅠㅜ 원없이 배불리 먹은거 같다 ㅎ 야식으로 고기도 구어먹고 ㅎㅎ 아래 사진은 너..

캠핑이야기 2022.01.17 0

REALFORCE 리얼포스 R2 PFU Limited Edition 무접점 키보드

고심 끝에 리얼포스 R2 PFU 저소음 45g 사양의 모델을 구매하게 되었다. 이 모델과 리얼포스 R2 저소음 45g 블루 그레이 제품과 많이 고민을 했었는데 결국 색상 블랙이 맘에들어서.. 사실 저렴한 금액이 아니라 많은 고민을 했지만 평소 오래보고 좋은 제품을 사는 편이라 이 모델을 선택하게 되었다. 개봉을 하게 되면 APC를 위한 키스페이서 2개로 2mm / 3mm 각 1개씩 존재한다. 설명서, 보증서 그리고 여분의 키캡이 존재한다. 개인적으로 심플함을 좋아하는데 딱 맞게 잘 산거 같다. 도각거림도 좋아하고 키감있는걸 선호해서, 살짝 저소음인 부분이 아쉽긴 하지만 회사용으로 구매 한거다보니 이 정도로 만족을 해야겠다.

기타 2022.01.17 0

[Raspberry Pi] 라즈베리파이4 Model B 4GB 키트 구성

Automotive Firmware 의 AUTOSAR 아키텍처 펌웨어를 개발하며, 지낸지 벌써 반년이 지나는 시점에서 보니 아쉬운 점이 많아 이 행동을 실천하게 되었다. 이전 회사에서 리눅스기반 개발을 다양하게 해 보았는데, 다시 그 맛을 느끼고자 Raspberry Pi를 구매하게 되었다. 요즘 파이 가격이 너무 비싸져서.. 모델3을 사야되나 하고있었는데 당근에서 마침 타이밍 좋게 4b 키트를 저렴하게 Get 이전에 리눅스 기반 키오스크 모드 웹 어플리케이션을 개발하면서 Raspberry Pi 4 Model B를 사용했었는데, 우연치 않게 또 동일 모델을 구매하게 되었다. 본론으로 돌아가면 Raspberry Pi 4 Model B Specifications System On Chip 의 경우 Broadc..

Raspberry Pi 2022.01.16 0

[VSCode] Visual Studio Code 및 C언어 관련 단축키 모음

Visual Studio Code 를 사용하면서 자주쓰게되는 필요로하는 단축키를 정리해 보았다. 언어 관련 단축키 Ctrl + ] : 라인 들여쓰기 Ctrl + [ : 라인 내어쓰기 Ctrl + F4 : 찾기 F3 : 다음 찾기 Shift + f3 : 이전 찾기 Alt + Enter : 일치 항목 모두 선택 Alt + Up/Dn : 라인 이동 Alt + Shift : 라인 복사 Ctrl + Alt + Up/Dn : 커서 복사 Ctrl + / : 주석 토글 F2 : 정의로 이동 Shift + F12 : 참조 표시 Ctrl + k, m : 언어 모드 변경

VSCode 2021.11.09 0

[Redmine] Error 발생 시 확인

레드마인 서버가 정상적으로 동작하지 않을 시 가장 첫번째로 확인해야 할 것은 log를 보는 것이다. Apache Log 확인 /var/log/error.log 경험 상 예를들어 말하자면 Linux 전용 개발 서버가 있는데 apt-get update 를 진행할 때 gem 쪽이 문제가 발생하는 경우 가 있엇는데 error.log 를 확인하여 알게 되었다. Redmine gem update sudo bundle exec rake redmine:plugins:migrate RAILS_ENV=production Apache 서버 재시작 sudo service apache2 restart

Redmine 2021.05.15 0

[Redmine] Linux 에 Redmine 설치 하기

레드마인(Redmine)은 오픈소스 프로그램으로 웹 기반의 프로젝트 관리와 버그 추적 기능을 제공하는 도구이다. 화면기반의 프로젝트 관리에 도움이 되도록 달력과칸트 차트를 제공하고 일정관리 기능을 제공한다. 또한 레드마인은 통합된 프로젝트관리 기능과 이슈추적, 여러가지 형상관리 기능을 제공한다. 레드마인의 디자인은 비슷한 기능을 가지는 오픈 소스 프로그램인 Trac에 영향을 많이 받았으며 루비 온 레일즈에 기반하여 작성되었고 멀티 플랫폼을 지원하며 여러가지 종류의 데이터베이스 및 34개의 언어를 지원한다. 먼저 Ubuntu 20.04 LTS 버전에서 진행을 해 볼 것이다. mariadb를 사용할 경우 udo apt-get install mariadb-server 진행이 정상적으로 진행이 잘 안된다면 아래..

Redmine 2021.05.15 0

[EtherCAT] IO Board 개발 이야기

자동화 시스템에서 빠질 수 없는 IO Board 와 더 빠른 통신을 위한 EtherCAT 통신 기반의 IO Board 를 개발하게 되었다. 이번 글을 통해서는 EtherCAT IO Slave 의 전반적인 환경 및 내용과 결과를 간단하게 설명 할 것이다. 추후 세세한 내용 글을(C언어 및 ET1100) 올려볼 것이다. 정확히는 EtherCAT IO Slave FW 를 개발하게 되었다. EtherCAT 은 독일의 Beckhoff(등등..) 사의 Embedded PC 및 여러 디바이스등을 제공한다. 아래 경로를 통해 여러 자료 및 FAQ 활용 www.ethercat.org/default.htm EtherCAT Technology Group | HOME The worlds largest Industrial Et..

EtherCAT IO 2021.05.09 0

[Raspberry Pi] IP, Samba, WiFi, mjpg-streamer, kiosk 등 사용

Raspberry Pi 의 기본적인 설정 및 특수 기능 사용을 위한 설정에 대해서도 설명해 보겠다. 기본 설정 변경 $ sudo raspi-config 를 통해 GUI 로 접근 가능하다. change passwd change hostname change locale enable VNC Interfacing Options / VNC 고정 IP 설정 sudo vi /etc/dhcpcd.conf # Example static IP configuration: interface eth0 static ip_address=192.168.10.205/24 #static ip6_address=fd51:42f8:caae:d92e::ff/64 static routers=192.168.10.1 static domain_nam..

Raspberry Pi 2021.05.09 0

[Raspberry Pi] OS 라이팅

이번에는 Raspberry Pi 에서 사용 할 수 있는 Linux 를 라이팅 하는 방법을 알아보겠다. 필자는 Raspberry Pi 를 통해 키오스크 모드를 사용할 목적으로 키오스크 모드 셋팅이 가능한 버전이 포함된 Linux 버전을 라이팅 할 것이다. 아래 gitgub 에서 clone 하여 가져올 수 있다. 라즈베리파이 키오스크 이미지 다운로드 및 라이팅 https://github.com/futurice/chilipie-kiosk futurice/chilipie-kiosk Easy-to-use Raspberry Pi image for booting directly into full-screen Chrome, with built-in convenience features for unattended ope..

Raspberry Pi 2021.05.09 0

키오스크 모드 웹 어플리케이션 네트워크 망 구성

키오스크 모드 웹 어플리케이션을 상위 사무실 PC 에서도 로그인 접속 및 원격 접속을 제공 하기 위해 아래 와 같은 망 구성을 해야한다, 키오스크 모드 웹 어플리케이션에는 라우터 + 새틀라이트(증폭기) 구성이며, 라우터에 상위망 모뎀 or 허브 or 라우터 or 공유기 가 붙을 수 있다. 허브 or 라우터 에 따라서 크게 설정이 다르게 된다. 이해가 쉽게 아래와 같은 구성도를 그려 보았다. (키오스크 모드 웹 어플리케이션 == SMI) 상위 망 허브 경우 DNS or 외부 IP 설정을 통한 접근 방식이며, 포트는 1880 고정이며, SMI 추가 연동시 DNS or 외부 IP 설정이 증가한다. 1. Orbi 네트워크 설정 - Orbi 라우터 외부 IP – 모뎀 게이트웨이에 종속 - Orbi 라우터 내부 I..

[Raspberry Pi] Micro HDMI 연결 우선 순위 부여 하기

라즈베리파이 보드를 TV 에 연결하여 사용할때 모니터 TV 전원이 보드보다 늦게 켜지는 경우 신호 안잡힘이 발생한다. 이렇게 사용하는 경우는 키오스크 모드나 GUI 를 보고싶을경우 필요하게 되는데, 기본적으로 라즈베리파이보드는 SSH 접근을 우선순위로 놓기 때문에 이런 상황을 마주할 수 있다. Raspberry Pi 4 기준으로 Micro HDMI 가 2개 존재 한다. 리눅스 OS 인 ubuntu 를 라즈베리파이 보드에 포팅하였다면 /boot -> config.txt 에서 설정을 할 수 있다.(Micro HDMI 설정 부분이다) readonly 라서 sudo 혹은 su 로 변경 한다음 진행을 해야 수정이 가능하다. 본인 상황에 맞게 설정을 해주면 된다.

Raspberry Pi 2021.05.05 0

[Node RED] Modbus Protocol JavaScript

이전에 키오스크 모드 웹어플리케이션 개발에 사용된 프로토콜이다. 바로 Modbus 프로토콜인데 워낙 임베디드 분야에서는 필수 프로토콜 이다. RaspberryPi 보드 에서 Node RED 플랫폼 환경으로 Modbus Protocol 을 JavaScript 로 구현 한 것이다. Modbus Protocol Module 을 사용하여 아래 처럼 구현 할 수 있다. 아래는 2개의 함수 노드 이다. 간략하게 설명하자면, 아래 환경을 구성하기 위해서는 Modbus Protocol 을 Read 하거나 Write 할 수 있는 Server 혹은 Client 가 존재해야 한다. 필자는 RaspberryPi 를 Client 로 사용하였으며, 다른 Board 와 Modbus Protocol 구성을 하여 데이터를 Read 해..

Java Script 2021.04.22 0

[Raspberry Pi] SSH 및 SAMBA Password 변경

라즈베리파이에서 외부망을 통해 접속 시 ssh 등 pi password 로 접근이 필요하다. 이러한 경우를 위해 원하는데로 관리 할 수 있다. SSH Password 변경 아래는 passwd 명령어를 통해 변경 아래는 sudo rasp-config 를 통한 password 변경 방법 이다. 삼바 Password 변경 $sudo smbpasswd -a 계정이름 ex) $sudo smbpasswd -a codersweb new SMB password : ********** Retrype new SMB password : ******** Added user codersweb 위 두 방법을 통해 SSH 접근 및 윈도우즈 환경에서의 모든 접근의 Passwd 를 변경 할 수 있다.

Raspberry Pi 2021.04.19 0

[Node RED] JavaScript Melsec Protocol

라즈베리파이 보드 / 리눅스 OS에서 Node RED 플랫폼을 올려 사용중인 환경이다. 이전에는 Modbus TCP Protocol 기반에서 작업을 했지만 이번엔 미쯔비시 사 Melsec Protocol 을 사용해볼 것이다. 읽어올 메모리맵이 적고 한정되어 있다면 간단하지만,. 더 광범위 하다면 한번에 많은 데이터를 지속적으로 읽어올 경우 손실도 크고, 보드 메모리 문제로 프로그램이 뻑? 날 수 있다. 그러므로 라운드로빈(Query 를 돌려야 한다)~ 을 적용 시켜야 한다. 라운드 로빈을 할 수 있게 쿼리 처리부분과 var msg_melsec = []; msg_melsec = [ "D6000,100", "D6100,100", "D6200,100", "D6300,100", "D6400,110", "D651..

Java Script 2021.04.17 2

[Node RED] JavaScript 부호 비트 연산

라즈베리파이 보드 Linux 기반에 NodeRED 플랫폼을 올려 사용 중인 환경이며, 상위 미쯔비시 PLC 와 Melsec Protocol 을 통해 데이터를 읽어 온다. 데이터를 웹 어플리케이션으로 제공하기 위해 JavaScript 와 여러 모듈을 사용한다. 여기서 소개할 내용은 PLC 데이터를 읽어 와서 양수 음수 값을 표현 해주기 이다.~ (다른팀에 개발해서 인수인계 해주었던 프로그램 수정 요청이 들어와 작업을 하게 되었다.) 그럼 그냥 데이터 읽은 데로 표현 해주면 될텐데 왜 신경을 써야하냐 인데... 보통 PLC 에서는 데이터 범위가 BYTE WORD DWORD QWORD 등이 있다. C / C++ / C# 에서는 이러한 비트 연산 처리가 비교적 자유로운데 JavaScript 에서는 약간의? 제약..

Java Script 2021.04.17 0

[Custom OS] shell script EtherNet dropped 패킷 검사 하기

리눅스에서 쉘 스크립트를 이용하여 이더넷 RX TX dropped 패킷 검사하는 스크립트를 짜보았다. 보드의 EtherNET PORT 의 문제를 의심하고 있는 상황이라 이러한 검사를 진행하게 되었다. 위에서는 리눅스라고 설명을 하였지만, 실제로 사용중인 임베디드 보드는 커스텀 OS 이다보니 패키지 설치가 불가능한 상황이라, 일정 주기를 위한 crontab 사용이 불가능하였다. 그리하여 init demon rc1 ~rc6 에서 해당 스크립트를 부팅시 실행하고 스크립트 안에서 loop 돌며 검사를 하는 시스템을 만들었다. 1분마다 EtherNET Port RX TX dropped 를 체크하여 dropped 가 발생하면 이전값을 비교하여, log 를 남긴다. 이전 값을 비교하기 위해 시스템 변수인 export..

Custom OS 2021.04.15 0

[C언어] sram open 및 설정

임베디드 시스템에서의 C 언어를 통해 sram 메모리를 읽어와 설정 하는 부분을 진행 해 볼것이다. 우선 OS 는 Custom OS 이다. 완전한 리눅스랑은 상이하다. /dev/mem 에 메모리 장치 파일이 존재한다. 즉, 메모리 장치 파일에 접근하여 파일의 메모리 공간을 가져와야 한다. 메모리 공간을 가져오는 방법으로는 lseek or mmap 등이 존재한다. 이 중 mmap 방법을 활용해 볼 것 이다. void *pMem_sram; unsigned shortusi; unsigned short*usp; intfd_sram; fd_sram = open("/dev/mem", O_RDWR); if( fd_sram < 0 ) { printf("ERROR: Failed to open SRAM\n"); exit(..

C 2021.03.29 0

[C언어] 비버퍼링 버퍼링 파일 함수 open, fopen 등

비버퍼링 함수인 open과 버퍼링 함수인 fopen 에 대해 설명 해 볼 것이다. 먼저 open 함수는 함수 호출에 의해 커널 내의 시스템 호출이 바로 실행되는 것이다. 비버퍼링 함수는 파일 디스크립터에 의해 작동 된다. 파일 디스크립터란 프로세스가 파일들을 접근할때 커널이 식별하기 위한 값이라고 볼수있다. 즉 파일을 열면 파일 디스크립터를 반환하게 된다. 파일 디스크립터는 음수가 아닌 정수로 반환이 된다. 파일 디스크립터 0 = 표준 입력 standard input, 1 = 표준 출력 standard output, 2 = 표준 오류 standard error 바로 이 파일디스크립터를 사용하여 리눅스에서 리다이렉션 등에 사용한다. 비버퍼링 함수 open(), creat(), read(), write(),..

C 2021.03.29 2

[C언어] pthread_t 스레드 생성 sched_param 스레드 스케줄링

pthread_t POSIX Thread API 이다 리눅스/유닉스에서 스레드 생성 및 관리 할 수 있다. sched_param 스레드의 스케줄링을 제공한다 구조체의 priority 값으로 우선순의를 정해 스케줄링을 관리한다. 아래는 스레드 생성 및 스케줄링에 관한 소스 이다. #include #define MAX_THREAD_IDX20 #define THREAD_IDX_SOCKET_SERVER0 #defineP_OTH_PRIORITY15 pthread_trt_threadId[MAX_THREAD_IDX]; if ( create_pthread(&rt_threadId[THREAD_IDX_SOCKET_SERVER], 0, 0x8,Thread_Socket_Server, NULL, P_OTH_PRIORITY)) ..

C 2021.03.28 1

[C언어] POXIS termios RS485 인터페이스 제어

termios POSIX Portable Operating System Interface for UNIX 의 약자 이며, ANSI/ISO 로는 리눅스/유닉스에서 API 제공이 부족하여 API 리눅스/유닉스 에서도 다양한 API 를 제공하기 위해 지원한다. termios 는 POSIX 에서 제공하는 구조체 이다. termios 를 사용함으로서 인터페이스를 설정 및 제어한다. 5가지의 기능인 (입력, 출력, 제어, 로컬, 특수문자) 가 있다. tty 는 사용자와 시스템 간의 통신을 연결해 주는 역할을 한다. #include #define UART1_FILE"/dev/ttyO1" struct termios termios; int fd_uart1_drv1; int rv; fd_uart1_drv1 = open(U..

C 2021.03.27 1

[Node RED] Node JS 플랫폼 Session Cookie 기반 Login Logout 기능 만들기

지난번에 개발한 SMI System Monitoring Interface 의 PC를 통한 유저 접속 기능을 제공하기 위해 2021.03.20 - [C++] - MFC 기반의 유저 PC 접속 응용프로그램 만들기 MFC 기반의 유저 PC 접속 응용프로그램 만들기 지난번에 개발한 SMI System Monitoring Interface 의 PC를 통한 유저 접속 기능을 제공하기 위해 많은 고민을 하였다. 접속을 허용하려면 결국 접근방식을 제공해야 하며 어떠한 방식으로 제공할지 고민 darkengineer.tistory.com 를 진행해보았다. 궁금하다면 위 를 참고해 보면 된다. 하지만 유저의 편의성과 관리 포인트룰 줄이기 위해 아래와 같이 웹어플리케이션 기반 접속 기능을 만들어 보고자 한다. 많은 고민을 해..

Java Script 2021.03.20 5

[C++] MFC 기반의 유저 PC 접속 응용프로그램 만들기

지난번에 개발한 SMI System Monitoring Interface 의 PC를 통한 유저 접속 기능을 제공하기 위해 많은 고민을 하였다. 접속을 허용하려면 결국 접근방식을 제공해야 하며 어떠한 방식으로 제공할지 고민을 하였다. 이번 글에서 소개할 내용은 MFC를 통한 응용프로그램을 개발하여 아래와 같이 기능을 만들어보았다. Visual Studio 2012, 32bit, MFC 환경에서 개발을 진행해 보았다. 위의 컨셉은 다음과 같다. 1. 유저 PC 에서 위 응용프로그램의 실행파일을 통해 접속 2. SMI 에서 구축한 통신망과 같은 망에 연결을 성공하면 위에서 Enable 표시 3. Login 을 통해 접근을 획득 시 socket 통해 IP 가 같은망에 있는지 Enable or Disable 처리..

C++ 2021.03.20 0

CSS, JQuery 를 이용한 웹 어플리케이션 적용

2020.11.29 - [Embedded] - 시스템 모니터링 인터페이스 개발 이전에 Node JS 기반인 Node Red 를 통해 Raspberry Pi 보드에 키오스크 모드를 적용한 웹어플리케이션을 개발했었다. Node Red 는 JavaScript 기반으로 함수 등을 만들 수 있으며, 여러 기능들이 모듈화 되어있다. 하지만 한계는 존재하고 추가 적인 기능을 위해 CSS 나 JQuery, Angular JS 를 통해 개발을 할 수도 있다. 이번에는 더욱더 섬세하며 추가적인 기능을 위해 CSS, JQuery 를 통해 개발을 진행해 보았다. Node Red 에서 제공하는 기능으로 접근 불가능한 영역에 대하여 개발을 진행했으며. HTML 에 접근하기 위한 CSS 를 만들어야 하며, JavaScript 의 ..

Java Script 2021.02.24 0

Linux bash 에서 oh my zsh agnoster 적용하기

본인은 리눅스 Moba x Term 을 개인적으로 자주 사용한다. 현재 사용중인 shell 은 bash 이다. 요즘 대세인 zsh 로 변경을 해보겠다. Install $ sudo apt-get install zsh 자동 shell script install 자동 설치 스크립트를 받기위해 아래 curl or wget 을 먼저 설치 후 아래 명령어를 진행해야 한다. sudo apt-get install wget sudo apt-get install curl Oh My Zsh install curl sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" wget sh -c "$(wg..

Linux 2020.12.17 0

Ubuntu /var/lib/dpkg/lock-frontend 잠금 파일을 얻을 수 없습니다. 해결하기

apt-get 을 실행하려다 보면 아래와 같은 상황을 마주 할 수 있다. 간단한 해결방법 중 하나로 재부팅이다. reboot 이나 shutdown 을 사용하여 재부팅을 해도 된다. 이렇게 간단하게 해결하는 방법을 제외한 더 확실한 방법이 있다. lock 제거하기 바로 lock 이 걸린 파일을들 제거하는 방법이다. sudo rm -rf /var/lib/dpkg/lock-frontend 아주 정상적으로 잘 되는것을 확인할 수 있다. Package 설정 후 업데이트 sudo rm -rf /var/lib/dpkg/lock-frontend sudo apt-get install zsh Package 를 내려받아 Database 에 있는 의존성을 업데이트 한다. 이렇게 하면 완벽하게 해결이 된다.

Linux 2020.12.17 0

WiFi 기반의 Modbus TCP, RTU 통신 구축하기(Repeater, Converter)

https://darkengineer.tistory.com/38?category=889290 통신 구축 관련 내용은 시스템 모니터링 인터페이스 SMI 와 관련되어 통신을 구축하기 위해 진행한 내용이다.(위 링크 참고) 기존에 사용중인 로봇의 Motion Board 의 통신 Port 지원은 아래와 같다. 로봇 Type1 (Modbus TCP) SMI(Modbus TCP) 로봇 Type2 (Modbus TCP) SMI(Modbus TCP) 로봇 Type3 (Modbus RTU) SMI(Modbus TCP) 로봇 Type4 (Modbus ASCII) SMI(Modbus TCP) 여기서는 WiFi 통신인 무선 통신망 구축을 위한 포스팅을 하겠다. Modbus TCP Modbus TCP 우선 로봇과 SMI 모두 ..

Git status 상태 확인

Untracked 와 tracked 상태 git 에는 두 가지 untracked 와 tracked 생태가 존재한다. untracked 는 git 에서 아직 추적하지 않는다는 의미이다. 다시 보면 git 에서는 해당 파일을 관리하지 않는다이다. 워킹 디렉토리에 존재한다고 해서 git 이 바로 관리할 수 있는 것 은 아니다. 그렇다면, 반대로 tracked 는 git이 관리에 들어갔다는 것이다. 이 두가지 상황을 알 수 있는 것은 git add --all git add test.txt git commit test.txt git status 를 통해 git의 상태가 untracked 에서 tracked 로 바꿀 수 있다. Unmodified 와 modified 상태 Unmodified 는 관리에 들어간 mod..

Git 2020.11.29 0

Git packfile에 관하여

처음에 SVN을 한 1년 사용하고 부터는 꾸준히 Git 을 사용하면서 Git 의 장점을 많이 느끼고 있다. SVN 은 Commit 을 하게되면 바로 저장소에 반영이 된다. 그렇다는 것은 다른 사용자와 충돌이 날 가능성이 매우 높다는 것이다. 실제 전 회사에서도 많이 겪은 상황이다. 일을 2번 해야되는 상황이 발생한다. Git 은 Commit 을 해도 Local 저장소에 반영이 되며, Push 를 통해 원격 저장소에 반영이 된다. 그 작업 전에 Fetch 와 Pull 등으로 Merge 를 할 수 있다. 이런 기능 외에도 아주 다양하며, 아주 좋은 형성관리이다. 하지만 최근 Git 때문에 골치가 아프다.. 아니 정확히 말하면 Git 서버를 구성했는데 그 녀석이 말썽이다. 바로 Git 서버 Disk 가 맛이 ..

Git 2020.11.29 0

키오스크 모드 웹 어플리케이션 개발

시스템 모니터링 인터페이스 줄여서 SMI 를 개발하였다. 흔히 HMI 랑 비슷한 개념이라고 보면 될거같다. 우선 보드는 Raspberry Pi 4 model B 시리즈를 선택하였다. RAM 4GB 스펙이다. 보드에 ubuntu OS 를 Fusing, 그리고 크로미움에 웹 어플리케이션을 통해 키오스크 모드로 모니터링 시스템을 제공한다. ~는 컨셉이다. Rsap 에서는 아래 명령어를 통해 config 설정을 할 수 있다. sudo raspi-config IP 설정과 키오스크 이미지를 올려 키오스크 환경을 만들어야 한다. •vi ~/.xsession NodeRed 를 설치해 준다. NodeRed 는 영국서 만들어진 NodeJS 기반의 JavaScript 개발 도구이다. bash

rsync 암호 서버 동기화

블로그 비밀번호를 까먹었다는 사실을 인지한후 많이 반성했다... 바쁘다는 핑계로 관리를 너무 소홀히 했다... ㅠ 우선 rsycn 는 증분 방식의 백업을 지원한다. 나는 요녀석을 서버에서 로컬에다가 데이터를 백업 하려 한다. 추가로 백업을 자동으로 하기위해 crontab 설정을 진행 할것이다. 단,,1!!@~@!@! rsync 는 서버의 passwd 를 필요로 하는데 자동으로 하기위해 개인키를 통해 공개키를 서버와 동기화 할것이다. 그럼 crontab 에서 자동으로 rsync 사용이 가능하다. 시작해보자. crontab -e 0 0 1 * * rsync -avzc dohyeon@@********:/:/disk1/yona-1.12.0 /backup/yona/. 1>/dev/null 2>/dev/null 0..

Linux 2020.11.18 0

커널을 분석해보자

http://www.iamroot.org/ldocs/linux.html#sec-1 Linux 3.9.11 분석 (x86_64) 64비트 efi 호출을 담당하는 루틴을 모아놓은 함수다. 64비트 호출 규약(rdi,rsi,r8,r9…)을 x64 EFI 호출규약(rcx,rdx,r8,r9)에 맞게 바꾸고 서비스를 호출한다. 여기서 efi_call 뒤에 붙는 0,1,2.. 숫자는 호출�� www.iamroot.org 진행 중 ~ 양이 방대하지만 계속 해나아가야지 지금은 STM 보드 쪽으로 개발중이라 마무리 되면 다시 kernel 을 보자 kernel 압축 풀어지는 과정 까지만 분석 완료.. 메모리 힙 스택 영역 까지만 분석함

Linux 2020.05.19 0

uboot 모드 작업하기

uboot 에 대해 정리를 해볼까 한다. uboot 다 알겠지만 bootloader 이다. bootloader 는 bl0 bl1 bl2 로 나누어지며, bl0 은 internal ram 에서 boot type? 을 찾고 bl1 은 MLO 라는 이미지 파일로 bl2 를 실행해주는 역할을 한다. 4KB ~ 16KB 정도의 크기를 가지고 있다. bl2 는 U-boot.img 로 실제 우리가 흔히 알고있는 uboot 이다. 자 그럼 uboot Image 에 대해 더 들어가보자. uboot Image를 uart mode 를 통해 푸싱하고 uboot 모드로 들어가본다. uboot 모드에서는 ram 과 rom 에 write erase read 를 할 수 있다. 중요한 의미이다. uboot 는 rom 의 첫번째 블럭에..

Linux 2020.05.09 0

shell script

linux 에서 엄청 유용하게 쓰이는 shell script 에 대하여 간단하게 정리를 해볼까 한다. 크게 쓰이는 용도는 여러 명령어나 빌드 과정 등을 sh 파일로 만들어 sh 만 빌드하여 복잡한 과정을 매우 간한하게 만들 수있다. 뿐만 아니라 Makefile 을 만들때도 shell script 와 매우 흡사하다. 완전 같지는 않고.. 초기 시작 시작은 vi 등의 에디터로 열어주면 된다. 그 다음 #!/bin/bash 로 설정을 해주어야 한다. bash shell 로 선택을 한다는 의미이다. 프로그래밍 언어에서 처럼 매크로를 설정해 줄 수 있는데 shell script 에서는 #define 이 아닌 TARGET=10 처럼 해준다. 단, 공백이 있어선 안된다. 문법 나머지 if else for while ..

Linux 2020.05.08 0

Git bash 를 해보자

Git 은 아주 유명한 형상관리 툴이다. Git 을 사용해보기 전에는 SVN 을 사용했었으며 주로 commit 만을 다뤘다. branch 할 일이 거의 없었다. Git 을 사용해보니 Branch 부터 뭔가 더 자유도가 높다는게 확실히 느껴진다. 지금까지 개인PC 의 경우 소스트리, 회사PC 의 경우 TortoiseGit을 사용했었다. 이러한 GUI 제공되는 Tool을 사용하다 보니 매우 방대한 Git 에 비해 아쉬운? 느낌이 강했다. 이번에 bash 환경에서 Git 을 제대로 사용해보자가 취지이다. 해보니 생각보다 더 재미있다. 뭐 엄청 많은걸 한건 아니고 초반 셋팅부터 branch commit 최종 push 까지이다. bash 로 숙달시켜놓으면 좋은점은 당연 linux에서도 사용이 편리하다는 점이다. ..

Git 2020.05.06 1

UBI 혼자 끄적

두서 없이 써 나아가보겠다 UBIFS -------------------- UBI Volume -------------------- Unsorted block Image UBI -------------------- MTD Memory technology Device -------------------- NAND NOR Driver -------------------- NAND NOR Flash Memory 의 구조라고일단 정리를 해보았다. - UBI 란 우선 UBI 가 뭐하는 녀석이냐면.. UBI 는 Nand Flash memory 를 management 할 수 있는 system 이다. UBI 는 disk 와는 다르게 volum 으로 나누어져 있으며 UBI 를 통해 mtd(device) 에 mapping..

Linux 2020.04.29 1

임베디드 리눅스의 구조

root filesystem - 어플리케이션이 존재하며, 실제 사용자의 인터페이스를 제공 ---------------------- operating system - 사용자나 어플리케이션 들의 요청사항을 처리, 하드웨어 및 전체 시스템을 제어 ---------------------- bootloader - 하드웨어 초기화 등 부팅환경 설정하고 운영체제를 실행 --------------------- 1. bootloader bootloader = bl0, bl1, bl2 구성 bl0 - 주로 전원이 들어오면 BIOS 에서부터 시작되서 MBR 을 찾게되고... 그 다음 어떤 모드로 부팅을 하면되고 셋팅하면되는지를 찾게되며 CPU internal 에 있는 iRom에 있는 코드를 읽어서, iRam에서 수행?된다...

Linux 2020.04.25 0

ModbusTcp

ModbusTcp 를 개발하게 되었다. C++ 32bit 환경에서 개발을 해보기로 했으며, 실질적으로 3일정도 소요된것 같다. 아래 링크인 Github 리포지토리에 개발한 소스를 push 해 놓았다. https://github.com/Anthony8062/ModbusTcp Anthony8062/ModbusTcp 프로젝트. Contribute to Anthony8062/ModbusTcp development by creating an account on GitHub. github.com 우선 ModbusTcp 말고도 ModbusRTU 등이 존재하고 그 중 ModbusTcp 로 개발하게 되었다. 실제적으로 실무에서도 자주 사용되는 프로토콜이다. 아래는 ModbusTcp 프로토콜의 프레임 구조 설명이다. · ..

C++ 2020.04.18 2

Visual Studio Code 컴파일 하기

Windows 에 vscode 를 install 하는 경우 아래에 접속하여 PC 환경에 맞게 진행하면된다. 참고로 User Mode 는 윈도즈 해당 사용자에서만 가능하며, System Mode 경우 해당사용자가 아니여도 사용 가능하다. https://code.visualstudio.com/download Download Visual Studio Code - Mac, Linux, Windows Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows. Download Visual Studio Code to experience a redefined code editor, optimized for ..

VSCode 2020.04.06 1

Memory 에 관하여

Memory 란 무엇인가. bios에 전원이 들어와서 MBR 에서 부트로더를 메모리에 적재 시키면 부트로더는 메모리 Rom, Ram을 휘젓고 다니며 init 프로그램을 실행시켜 리눅스 커널을 동작 시킨다. 부트로더가 Rom 과 Ram 을 휘젓고 다닌다고 하였는데 사실은 블럭을 이동하며 실행된다. 우선 Memory의 구조를 이해해야 하는데, 위와 같이 간단하게 살펴보자면, Rom 은 비활성 Flash Memory 이며, Ram 은 휘발성 Memory 이다. 먼저, XIP 를 이해해야 하는데 XIP(excute in place) 로 Random access 가 가능하며, 메모리 상에서 직접 code, program 을 실행 할 수 있다는 것을 의미한다. Ram 은 모두 xip 가 지원되며, Rom 에서는 N..

Linux 2020.03.17 1

APM 및 게시판 설치하기

APM 은 웹 서버인 apache, 웹 프로그래밍 언어인 PHP, 데이터베이스인 MariaDB 를 묶어서 APM 이라고 칭한다. php 패키지를 설치해서 APM 에 연동시켜야 하고, 이를 활용한 웹 응용프로그램으로 게시판을 만들어 보자. /var/www/html/ 경로에 phpinfo.php 파일을 아래와 같이 생성해준다. 웹브라우저에서 ip주소/phpinfo.php 접속 했을 때 정상 접속 확인을 위한 절차이다. 아래와 같이 생성되면 정상 php 가 설치됨을 확인할 수 있다. APM 환경에서 제공하는 게시판 중 제로보드와 그누보드가 있는데 본인은 그누보드로 사용해보겠다. 그누 아카이브 파일을 해제하여 아래 경로에 압축을 해제하여 준다. 아카이브 파일을 경로로 웹브라우저로 접속하면 아래와 같은 창이 뜬다..

Linux 2020.03.14 0
반응형