Loading [MathJax]/jax/output/CommonHTML/jax.js

Embedded : : Linux/: : Linux 21

Linux C/C++ shared library 컴파일하기 fPIC 옵션 GOT, PLT

Linux C/C++ shared library 컴파일하기   C++   g++ -shared -fPIC -o g++ -shared fPIC -o lib.so code.cpp    C   gcc -shared [-fPIC] -o gcc -shared [-fPIC] -o lib.so code.c -fPIC 옵션은 생략이 가능하지만, 공유라이브러리를 만들 때는 -fPIC 옵션 사용을 권장합니다.(컴파일 종류에 따라서 -fPIC는 필수 옵션입니다.) fPIC를 사용하지 않을경우 재배치 기법을 사용하게 되는데,간략하게, 라이브러리의 주소를 현재 사용하려는 프로세스 주소에서 접근가능하게 재배치 한다는 개념입니다.    공유 라이브러리의 단점 1. 여러 프로세스가 공유라이브러리를 공유하게되면 각 프로세스가 로드 ..

[Linux] 환경변수 PATH 추가하기

1. [Linux] 환경변수 PATH1.PATHLinux.PATH 라는 환경 변수를 이용해 쉘이 어디를 볼지 경로를 확인한다. 즉, PATH에 프로그램 실행 경로를 추가해주면, 명령어 실행 시 경로를 따로 입력하지 않아도 PATH 환경변수에 있는 디렉토리에서 실행파일을 찾아 실행해 준다.    2. printenv 명령어로 현재 적용된 환경변수 확인 ubuntu@ip-172-31-42-70:~$ printenvSHELL=/bin/bashPWD=/home/ubuntuLOGNAME=ubuntuXDG_SESSION_TYPE=ttyMOTD_SHOWN=pamHOME..

임베디드 리눅스의 4대요소

1.  임베디드 리눅스 구성요소 임베디드 리눅스는 4가지 구성요소로 이루어져 있습니다.    1.  툴체인 (Toolchain)   타겟 장치를 위한 코드를 만드는데 필요한 컴파일러와 기타 도구로 구성되어있다.    2.  부트로더 (Bootloader)   타겟 보드를 초기화하고 리눅스 커널을 로드하는 프로그램    3.  커널 (Kernel)   시스템 자원을 관리하며 유저의 시스템콜 요청을 처리하는 시스템의 핵심 SW로, 하드웨어와의 접점이다.    4.  파일 시스템 (File System)   커널이 초기화를 끝낸 뒤 실행되는 라이브러리와 프로그램 등을, 일정 형식(EXT, FAT 등)에 따라 계층방식으로 담고있다.  ※ 다섯번째 요소 : 임베디드 애플리케이션에 고유한 프로그램의 묶음, 장치를 ..

임베디드 리눅스 개발 단체

임디드 리눅스 개발 단체   1.  리눅스 커뮤니티   우리가 보는 대부분 리눅스 커널 코드 출처는 리눅스 커널 커뮤니티입니다.  리눅스 커널 커뮤니티는 리눅스 커널 개발의 심장입니다. 리눅스 커널 자체 알고리즘과 논리적 오류와 문제점을 개선하는 패치를 논의하고 관리합니다.    - 버그 수정 패치     - 코드 리팩토링     - 신규 알고리즘    - Document ​보통 2주 간격으로 Greg Kroah-Hartman 개발자가 다음과 같은 메일로 전 세계 개발자들에게 패치 반영 사실을 통지합니다. ​리눅스 커널 버전과 코드 내역은 https://www.kernel.org/ 사이트에서 확인할 수 있습니다. ​위 그림에서 왼쪽 부분을 보면 ‘longterm’으로 표시된 부분이 보입니다. 이는 안정화..

리눅스(유닉스)의 파일 시스템

리눅스(유닉스)의  파일 시스템 살펴보고자 하는 파일시스템은 전통적인 유닉스의 파일시스템으로 리눅스에서도 이 파일시스템을 선택적으로 사용할 수 있다. 유닉스 시스템의 디스크를 논리적인 구조로 나타내면 아래 그림 과 같이 부트 블록, 수퍼 블록, inode 리스트 그리고 데이터 블록들로 나눌 수 있다.  - 부트 블록 : 운영체제를 주기억장치에 올리는 역할을 하는 프로그램이 들어 있는 영역으로, 윈도우의 부트 레코드와 유사하다.  - 수퍼 블록 : 디스크에 대한 다양한 정보를 저장하고 있는 곳으로, 전체 블록의 수, 블록의 크기, 사용 중인 블록의 수, 사용할 수 있는 블록의 번호, inode 리스트의 크기, 사용할 수 있는 inode의 번호 등의 정보를 저장한다.  - inode 리스트 :..

리눅스(Linux)의 디렉터리(Directory)

리눅스에서는 모든 것을 파일로 다룬다.  먼저, 데이터(ex. 문서, 이미지, 영상, 프로그램 등)들이 파일로 보존된다.또한, 리눅스에서는 디렉터리도 파일의 한 종류로 다루며, 심지어 시스템을 구성하는 장치들(ex. HDD, 키보드, 프린터 등) 조차도 파일로 취급한다.   리눅스에서의 파일 종류리눅스에서는 파일을 일반 파일과 특수 파일, 그리고 디렉터리로 구분한다.   일반 파일  텍스트파일, 실행 파일 등 텍스트나 바이너리 형태의 데이터를 저장하고 있는 파일   장치 파일  장치를 구동하는데 사용되며, 장치 관련 특수 파일을 다른 파일과 구분하여 장치 파일(device file)이라고도 한다. 디렉터리는 해당 디렉터리에 속한 파일을 관리하는 특별한 파일이다.    ..

유닉스(UNIX)와 리눅스(Linux)의 발전 과정

리눅스는 유닉스 표준에 기반하고 있으므로, 유닉스의 발전 과정과 관련 표준을 간략하게 살펴보자. 유닉스(UNIX)는 1969년에 미국의 통신 회사인 AT&T 산하의 벨 연구소에서 켄 톰슨(Ken Thompson)과 데니스 리치(Dennis Ritchie)가 개발한 운영체제이다. 처음엔 기존 운영체제처럼 어셈블리어로 개발하였으나, 데니스 리치가 개발한 C언어를 사용해 1973년에 다시 만들면서 고급 언어(High-Level Language)로 작성한 최초의 운영체제가 되었다. 유닉스는 초기에 소스 코드가 공개되어 대학교나 기업에서 쉽게 이용할 수 있었고, 이에 따라 다양한 기능이 추가되었다. 이 후에, AT&T의 상용 유닉스(시스템V)와 버클리 대학교(U.C.Berkeley)의 BSD(Berkele..

Raspberry Pi(라즈베리파이) SSH

라즈베리파이에서 직접 개발하기보다 개발환경에서 라즈베리파이를 연결할 때, IP를 확인해봅시다.  1. 라즈베리파이에 할당된 네트워크 정보 확인  - eth0 : 유선 네트워크 | wlan0 : 무선 네트워크 라즈베리파이 터미널에서 ip값 확인 pi@raspberrtpi:~ ifconfigvimEditorIPIP,IPpi@raspberrtpi:   sudo nano /etc/dhcpcd.conf또는pi@raspberrtpi:~ $  sudo vi /etc/dhcpcd.conf 입력 후, # Example static IP configuration: 부분에 주석 해제 후, 본인이 설정하고자 하는 고정 IP값 입력한다.  그 후,..

LINUX에서 Cmake 설치하기

Linux에서 Build를 위해서는 cmake가 필요하다.​cd .. // Build 하려는 디렉토리 이동mkdir build; cd buildcmake .. // cmake를 실행한다. Error 발생 시 cmake를 설치해야한다.make./DNN_yolo ​https://cmake.org/download/  $ wget https://github.com/Kitware/CMake/releases/download/v3.28.0-rc3/cmake-3.28.0-rc3.tar.gz // wget을 통해 cmake tar 파일을 다운로드  2023. 11. 2 현재 최신버전이 cmake-3.28.0-rc3이다.그 이후에 압축..

LINUX OpenSSL 설치하기

LINUX OpenSSL 설치하기 cmake 하던 중간에 종종 make나 sudo make install에서 오류가 뜨는 경우가 있다.그럴 때는 OpenSSL을 설치한다.​https://www.openssl.org/source/ 위 사이트에 들어가서, openssl-1.1.1w.tar.gz를 마우스 우클릭 후에 링크 복사를 한다. ( 2023-Sep-11, 가장 최신 버전) // wget으로 Download. wget이 없으면 yum install wget (Redhat) || apt-get install wget (Ubuntu)$ wget https://www.openssl.org/source/openssl-1-1-1w.tar.gz// tar xvfz로 압축풀기..