2024-01-04

gcc 10.3.0 설치

wget https://ftp.gnu.org/gnu/gcc/gcc-10.3.0/gcc-10.3.0.tar.gz

tar -zxvf gcc-10.3.0.tar.gz

sudo apt-get install build-essential
sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev

mkdir build-gcc
cd build-gcc

../gcc-10.3.0/configure --enable-languages=c,c++ --disable-multilib

make -j$(nproc)

sudo make install

gcc --version

2024-01-03

git으로 받아놓은 소스를 submodule까지 다 아카이브하기

git archive하면 소스로 받지만 서브모듈은 받을수 없다.

그래서 스택오버플로우 에서 찾았다.

git ls-files --recurse-submodules | tar caf ../src.tar.gz --xform s:^:prog/: --verbatim-files-from -T-

2023-11-29

u-boot가 이해하는 스크립트 한 문장

'gpio input GPIOB1; retval=$?; if test -e ${devtype} ${devnum}:${distro_bootpart} /overlays/overlays.txt; then env set fdt_addr ${fdt_addr_r}; if load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr} ${fdtfile} && fdt addr ${fdt_addr} && fdt resize && setexpr fdtovaddr ${fdt_addr} + C0000 && load ${devtype} ${devnum}:${distro_bootpart} ${fdtovaddr} /overlays/overlays.txt && env import -t ${fdtovaddr} ${filesize} && test -n ${overlay}; then echo loaded overlay.txt: ${overlay}; for ov in ${overlay}; do if test "${ov}" = "lan9303_phy" && test ${retval} -eq 0; then load ${devtype} ${devnum}:${distro_bootpart} ${fdtovaddr} /overlays/${ov}.dtbo && fdt apply ${fdtovaddr}; else echo "DSA mode .. overlay skip"; fi; done; fi; fi
'

gpio명령으로 핀상태를 읽는다면,
첫회는 리턴값($?) 이 핀의 상태를 표시하고 반복 호출시 항상0이 된다.
즉, 핀상태가 1이라면, 한번은 1을 표시하고, 다음부터는0을 표시함.

무슨말이냐. -_-;;;

add lte interface

nmcli con add type ethernet ifname lte0 con-name lte0 ipv4.method auto ipv6.method disabled ipv4.never-default false

```bash
#!/bin/sh

# 사용법 표시 함수
usage() {
    echo "Usage: $0 -p PORT -f OUTPUT_FILE"
    exit 1
}

# 옵션 초기화
PORT=""
OUTPUT_FILE=""

# 옵션 파싱
while getopts "p:f:" opt; do
    case $opt in
        p)
            PORT="$OPTARG"
            ;;
        f)
            OUTPUT_FILE="$OPTARG"
            ;;
        \?)
            usage
            ;;
    esac
done

# 필수 옵션 확인
if [ -z "$PORT" ] || [ -z "$OUTPUT_FILE" ]; then
    usage
fi

# TCP 서버 실행
while true; do
    nc -l -p "$PORT" | while read -r line; do
        # 현재 시간을 포맷에 맞춰서 가져옴
        current_time=$(date "+%Y-%m-%d %H:%M:%S")

        # 수신한 패킷과 시간 정보를 출력
        echo "$current_time - $line"

        # 파일에 저장 (append 모드)
        echo "$current_time - $line" >> "$OUTPUT_FILE"
    done
done
```

이 스크립트는 무한 루프를 통해 계속해서 클라이언트의 연결을 수락하고, 연결이 끊어지면 다시 대기하여 새로운 연결을 수락합니다. 계속해서 수신된 패킷과 시간 정보를 출력하고 지정된 파일에 저장합니다. 이렇게 하면 `-k` 옵션을 사용할 수 없는 `nc`에서도 동작할 것입니다.

2023-11-28

overlays

env set scan_overlays 'if test -e ${devtype} ${devnum}:${distro_bootpart} /overlays/overlays.txt; then env set fdt_addr ${fdt_addr_r}; if load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr} ${fdtfile}; then fdt addr ${fdt_addr}; fdt resize; setexpr fdtovaddr ${fdt_addr} + C0000; if load ${devtype} ${devnum}:${distro_bootpart} ${fdtovaddr} /overlays/overlays.txt && env import -t ${fdtovaddr} ${filesize} && test -n ${overlay}; then echo loaded overlay.txt: ${overlay}; for ov in ${overlay}; do if test "${ov}" = "lan9303_phy" && gpio input GPIOB1; then echo "Skipping load and apply for ${ov} because GPIOD10 is 1"; else echo overlaying ${ov}...; load ${devtype} ${devnum}:${distro_bootpart} ${fdtovaddr} /overlays/${ov}.dtbo && fdt apply ${fdtovaddr}; fi; done; fi; fi; fi;'

2023-11-27

[autopsy] java관련 의존성 설치.

파일시스템 분석툴 설치시 문제.

sudo dpkg -i sleuthkit-java_4.12.1-1_amd64.deb
의존성문제 발생

sudo apt --fix-broken install
의존성 맞게 다운로드하여 설치

sudo dpkg -i sleuthkit-java_4.12.1-1_amd64.deb
잘 설치되었다고 나옴.

끝.


2023-11-22

fallocate

#include <fcntl.h>
#include <unistd.h>

int main() {
  // 파일 이름
  const std::string filename = "/path/to/file.bin";

  // 파일 크기
  const int filesize = 256 * 1024 * 1024;

  // 파일 핸들
  int fd = open(filename, O_CREAT | O_RDWR, 0644);

  // 파일의 크기를 지정하여 파일을 생성
  fallocate(fd, FALLOC_FL_KEEP_SIZE, 0, filesize);

  // 파일 핸들을 닫음
  close(fd);

  return 0;
}

[vscode] tasks.json launch.json


### tasks.json    {    "version": "2.0.0",    "tasks": [      {        "label": "checkCrossCompile",        "command": "bash",        "args": [          "-c",          "if [ -n \"$CROSS_COMPILE\" ]; then echo 'true'; else echo 'false'; fi"        ],        "type": "shell"      },      {        "label": "setCrossCompileEnv",        "dependsOn": ["checkCrossCompile"],        "command": "echo 'IS_CROSS_COMPILE=${checkCrossCompile.result}' > .vscode/env.txt",        "type": "shell"      }    ]  }    ### launch.json    {    "version": "0.2.0",    "configurations": [      {        "name": "C++ Launch (x64)",        "type": "cppdbg",        "request": "launch",        "program": "${workspaceFolder}/build_x64/executable",        "envFile": "${workspaceFolder}/.vscode/env.txt"      },      {        "name": "C++ Launch (ARM)",        "type": "cppdbg",        "request": "launch",        "program": "${workspaceFolder}/build_arm/executable",        "envFile": "${workspaceFolder}/.vscode/env.txt"      }    ]  }  

tasks.json 파일은 checkCrossCompile 작업과 setCrossCompileEnv 작업을 정의합니다. checkCrossCompile 작업은 CROSS_COMPILE 환경 변수가 설정되어 있는지 확인하고, setCrossCompileEnv 작업은 IS_CROSS_COMPILE 변수의 값을 checkCrossCompile 작업의 결과에 따라 설정합니다.

launch.json 파일은 C++ Launch (x64)C++ Launch (ARM)이라는 두 가지 디버깅 구성을 정의합니다. 두 구성 모두 envFile 속성을 사용하여 .vscode/env.txt 파일에서 환경 변수를 가져옵니다.

이 구성을 사용하면 디버깅 세션을 시작할 때 다음과 같은 일이 발생합니다.

  1. checkCrossCompile 작업이 실행되어 CROSS_COMPILE 환경 변수가 설정되어 있는지 확인합니다.
  2. CROSS_COMPILE 환경 변수가 설정되어 있으면 IS_CROSS_COMPILE 변수가 true로 설정됩니다.
  3. CROSS_COMPILE 환경 변수가 설정되어 있지 않으면 IS_CROSS_COMPILE 변수가 false로 설정됩니다.
  4. .vscode/env.txt 파일에 IS_CROSS_COMPILE 변수의 값이 기록됩니다.
  5. C++ Launch (x64) 또는 C++ Launch (ARM) 구성을 사용하여 디버깅 세션을 시작합니다.

디버깅 세션을 시작하면 envFile 속성에 지정된 파일에서 환경 변수를 읽습니다. 이 경우 .vscode/env.txt 파일에서 IS_CROSS_COMPILE 변수의 값을 읽습니다.

따라서 IS_CROSS_COMPILE 환경 변수의 값은 디버깅 세션에 따라 true 또는 false가 됩니다.

[vscode] arm or x64 launch

// tasks.json
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "checkCrossCompile",
      "command": "bash",
      "args": ["-c", "if [ -n \"$CROSS_COMPILE\" ]; then echo 'true'; else echo 'false'; fi"],
      "type": "shell",
      "options": {
        "env": {
          "IS_CROSS_COMPILE": "${command:checkCrossCompile}"
        }
      }
    }
  ]
}

// launch.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "C++ Launch (x64)",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/build_x64/executable",
      "env": {
        "IS_CROSS_COMPILE": "false"
      }
    },
    {
      "name": "C++ Launch (ARM)",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/build_arm/executable",
      "env": {
        "IS_CROSS_COMPILE": "true"
      }
    }
  ]
}

구글드라이브 wget 다운받는 명령어

구글드라이브의 파일을 링크가있는사람 무조건받기로 해서 공유링크를 복사하여 아래의 "구글드라이브공유링크"에 붙여넣는다. 원하는파일명은적절히 써준다.  주의: 실행속성은 추가로 변경해주어야한다. chmod a+x 파일명 GDRIVE_LI...