728x90

Linux 16

clang toolchain의 위력 (빌드 최적화, build time profiling)

인포테인먼트 제품을 개발하고 있고 Yocto 프로젝트 기반의 임베디드 리눅스를 기반으로 하고 있다. Yocto 버전은 dunfell을 사용하다가 작년에 kirkstone으로 고생해서 마이그레이션을 해서 사용중이다. 컴포넌트 하나가 이전에 4시간 걸렸던 것이 LTO (Link Time Optimization) 옵션을 적용해서 2시간으로 줄었다. 이 컴포넌트는 ARXML 기반으로 프로토콜이 작성되어 있고 이것이 code generator을 통해 헤더와 코드가 생성되고 라이브러리가 생성되는 구조이다. 그렇기에 엄청나게 많은 파일이 linking 단계에서 사용되어 오래걸렸던 것이다. LTO는 빌드 시간이 더 걸릴 수 있다고 봤지만 이 경우에는 엄청나게 단축되었다. 3가지 variant가 있는데 최근 업그레이드 ..

Linux 2024.06.06

[Ubuntu][Error] Problem with MergeList” or “status file could not be parsed” error when trying to do an update?

아래와 같은 에러가 나올 때는, 일단 /var/lib/apt/lists 디렉토리의 내용을 지우고 apt-get update를 해주면 정상동작 된다. Error changhyeok.bae@~/work/yocto/openembedded-core/build $ sudo apt-get install pip Reading package lists... Error! E: Encountered a section with no Package: header E: Problem with MergeList /var/lib/apt/lists/kr.archive.ubuntu.com_ubuntu_dists_trusty_main_i18n_Translation-en%5fUS E: The package lists or status f..

Linux 2023.04.21

The Art of Command Line

The Art of Command Line은 Linux에서 사용하는 Command Line의 기초에 대해 정리해 놓은 프로젝트이다. 각 언어별로 있으니 시간날 때 한번 훓어보면 도움이 될 것 같다. Linux를 시작하는 초보자부터 많이 사용하는 개발자들에게도 정말 유용하다. 한글도 있다 :) Repository: https://github.com/jlevy/the-art-of-command-line GitHub - jlevy/the-art-of-command-line: Master the command line, in one page Master the command line, in one page. Contribute to jlevy/the-art-of-command-line development by..

Linux 2023.04.20

Parallel SSH

Parallel SSH를 이용해 여러 시스템에 ssh 명령을 전달한거나, Parallel SCP, SLURP를 이용해 파일을 주고 받을 수 있다. 잘못하면 전체 시스템을 모두 망가트릴 수 있으니, 가급적이면 시스템 상태를 파악하는 용도로 사용하면 좋을 듯 하다. 전체 시스템을 관리하는 퍼펫(puppet)이라는 도구를 사용하여 시스템을 제어하는 것도 좋을 것 같다. Ubuntu에 pssh를 설치한다. $ sudo pat-get install pssh parallel-ssh 명령어로 uptime이라는 명령어를 여러 시스템에 보낸다. -l 옵션에 사용자 이름을 안주고 IP 앞에 "사용자이름@IP" 를 넣어도 된다. $ parallel-ssh -H "192.168.1.0 192.168.2.0" -l user -..

Linux 2023.04.19

[Ubuntu] E: Encountered a section with no Package: header 에러 발생

Ubuntu 12.04 64bit를 사용하고 있는데, 언제부터인지 apt-get 명령어를 실행하면 다음과 같은 에러가 발생한다. E: Encountered a section with no Package: header E: Problem with MergeList /var/lib/apt/lists/kr.archive...... E: The package lists or status file could not be parsed or opened. 다음과 같이 특정 디렉토리를 삭제한 후, apt-get update를 sudo로 실행하면 해결된다. $ sudo rm /var/lib/apt/lists/* -vf $ sudo apt-get update Reference: http://ubuntuforums.org/..

Linux 2023.04.19

Manage multiple SSH private keys with IdentityFile (여러개의 SSH key 관리)

여러 개의 SSH key를 관리해야 할 필요가 있다. 이 때는 아래를 참고하면 된다. SSH has a per-user configuration file called ‘~/.ssh/config’ that it can use to select your private keys based on the remote user name and remote host by using wildcards. Let’s check out my ‘config’ file: IdentityFile ~/.ssh/ids/%h/%r/id_rsa IdentityFile ~/.ssh/ids/%h/%r/id_dsa IdentityFile ~/.ssh/ids/%h/id_rsa IdentityFile ~/.ssh/ids/%h/id_dsa Ide..

Linux 2023.04.19

리눅스에서 사용하는 바이너리 유틸리티

바이너리 유틸리티는 바이너리를 조작하거나 정보를 위한 프로그램들의 모임을 말하고 이런 유틸리티 들에 대해 소개를 하고자 한다. 이 글 또한, 유닉스 리눅스 프로그래밍 필수 유틸리티 책 7장에 나온 내용을 정리한 것이다. addr2line: 바이너리 파일에서 특정 주소가 어떤 파일의 어떤 라인인지 보여줌 c++filt: C++/Java 심볼 문자열을 맹글링 되기 전 문자열로 보여줌 gprof: 프로파일 정보 출력 nm: ELF 포맷 오브젝트 파일의 심볼을 보여줌 objcopy: 오브젝트 파일의 복사 / 변환 objdump: 오브젝트 파일을 업프하거나 역어셈할 때 사용 ranlib: 정적 라이브러리 내에 인덱스를 생성할 때 사용 readelf: ELF 포맷의 오브젝트 파일 정보를 보여줌 size: 오브젝트 ..

Linux 2023.04.18

ELF 바이너리 파일 포맷 구조

ELF(Executable and Linkable Format) 바이너리 포맷은 유닉스/리눅스에서 가장 흔히 사용하는 파일 포맷이다. 1. ELF 바이너리 포맷 구조 Program header table: 재배치 불가능한 ELF object (ex, 실행 바이너리) Section header table: 재배치(relocation) 가능한 object (object 파일) 2. ELF 헤더 ELF 헤더에는 어디서부터 어디까지가 program/section header인지에 대한 정보가 들어있다. readelf -h [ELF object] 명령을 실행하면 아래와 같이 헤더 정보를 읽을 수 있다. 위는 so 파일이고 object 파일일 경우 program header가 0으로 설정이 된다. 3. progra..

Linux 2023.04.18

ld linker (링커)

링킹 과정은 조각난 object 파일들을 하나의 바이너리 이미지로 합치는 과정이다. 이 과정은 결합(merge)과 재배치(relocation)로 이루어 진다. 1. 결합(merge) 여러 ELF 바이너리 포맷으로 구성된 조각난 object 파일들은 최종 바이너리 이미지로 합쳐져 하나의 ELF 실행 파일을 구성한다. ld 명령어에 넣은 인자 순서대로 각 섹션에 들어간다. 2. 재배치(relocation) 단순히 결합 과정에 합쳐진 각 섹션을 실제 코드에 맞도록 조정하는 과정이다. 위의 그림에서 Linking View는 object 파일의 형식이고 Execution View는 linking 후 최종 하나의 실행 파일의 형식을 나타낸다.

Linux 2023.04.18
728x90
반응형