• 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글
Linux

시놀로지 모듈 컴파일 방법을 알고 싶습니다.

화정큐삼 화정큐삼 304

0

10

요새 리눅스에서 c 소스 컴파일하는것 배워서 조금씩 해보고 있는데요.
멀티스레드로 압축하는 pigz 도 최근에 TC 리눅스에서 아래처럼 컴파일을 해봤습니다.

잘 만들어져서 M shell 안에 압축속도 올리는데도 적용을 마쳤구요.

 

tce-load -wi compiletc

 

wget https://zlib.net/pigz/pigz-2.7.tar.gz

tar zxvf pigz-2.7.tar.gz

cd pigz-2.7

 

vi Makefile

 

install:

cp pigz /usr/local/bin/

cp unpigz /usr/local/bin/

 

sudo make

sudo make install prefix=/usr/local


시놀로지용 리눅스에서 모듈 컴파일 하는 방법을 알고 싶습니다.


기존 커널 4.4.180+ 이 아닌 4.4.302+ 로 컴파일이 되야 하는데요.


TC 리눅스, 시놀로지 아니면 우분투 어디다 두고 해야하는건지도 잘 모르겠고


커널 버전을 맞추려먼 어떤게 핵심인지도 잘 모르곘습니다.

 

기존에 깃헙에 4.4.180+ 용으로 컴파일 할 수 있는 소스들은 공유가 되어 있습니다.

 

이걸 재활용 할 수가 있는걸까요?

 

 

신고공유스크랩
10

화정큐삼 화정큐삼
30Lv. 18095P
다음 레벨까지 1125P

1) Xpenology RedPill DS918+ FRIEND DSM 7.2.1-69057 Update 1, ASUS IOT H310i-IM-A R2.0 G5500 / Intel I211, I219-V / 16GB  / SilverStone ECS07 5포트 SATA M.2 NVMe PCIe 스토리지 확장 카드 / 3x4TB + 1x3TB SHR, 1x8TB 

 

2) Xpenology RedPill DS1823xs+ FRIEND DSM 7.2.1-69057 Update 1, Asus B150I PRO GAMING/AURA i3-7100T / Intel Gigabit LAN x 3 / 16GB  /  ASM1166 M.2 NVME PCIE 6 Port Sata 스토리지 확장 카드 / 6 x 3TB RAID6

profile image 1등
화정큐삼 글쓴이 2023.03.19. 08:59

chatGPT 가 이렇게 알려주긴 했는데, 정말 맞을까요?

일단 가상PC에 우분투 설치 진행 합니다.

 

스크린샷 2023-03-19 오전 8.58.36.png.jpg

profile image 2등
화정큐삼 글쓴이 2023.03.19. 12:07
일단 기존것은 컴파일 연습해봤는데, 되는것 같습니다.

정작 실제 4.4.302가 되야 하는 아폴로 레이크 부터 막히네요.

Compiling module for apollolake-4.4.302...
make: Entering directory '/opt/apollolake/build'
CC [M] /tmp/input/lib/fonts/fonts.o
CC [M] /tmp/input/drivers/cpufreq/cpufreq_ondemand.o
CC [M] /tmp/input/drivers/cdrom/cdrom.o
CC [M] /tmp/input/drivers/acpi/thermal.o
CC [M] /tmp/input/drivers/cpufreq/cpufreq_conservative.o
CC [M] /tmp/input/drivers/hwmon/hwmon-vid.o
CC [M] /tmp/input/drivers/input/keyboard/atkbd.o
CC [M] /tmp/input/drivers/cpufreq/cpufreq_governor.o
/tmp/input/drivers/hwmon/hwmon-vid.c: In function 'vid_which_vrm':
/tmp/input/drivers/hwmon/hwmon-vid.c:296:51: error: 'struct cpuinfo_x86' has no member named 'x86_mask'
296 | vrm_ret = find_vrm(c->x86, c->x86_model, c->x86_mask, c->x86_vendor);
| ^~
scripts/Makefile.build:286: recipe for target '/tmp/input/drivers/hwmon/hwmon-vid.o' failed
make[3]: *** [/tmp/input/drivers/hwmon/hwmon-vid.o] Error 1
scripts/Makefile.build:487: recipe for target '/tmp/input/drivers/hwmon' failed
make[2]: *** [/tmp/input/drivers/hwmon] Error 2
make[2]: *** Waiting for unfinished jobs....
CC [M] /tmp/input/lib/fonts/font_8x8.o
CC [M] /tmp/input/lib/fonts/font_8x16.o
/tmp/input/drivers/acpi/thermal.c: In function 'acpi_thermal_resume':
/tmp/input/drivers/acpi/thermal.c:1153:21: warning: the comparison will always evaluate as 'true' for the address of 'active' will never be NULL [-Waddress]
1153 | if (!(&tz->trips.active[i]))
| ^
/tmp/input/drivers/acpi/thermal.c:167:36: note: 'active' declared here
167 | struct acpi_thermal_active active[ACPI_THERMAL_MAX_ACTIVE];
| ^~~~~~
LD [M] /tmp/input/lib/fonts/font.o
scripts/Makefile.build:487: recipe for target '/tmp/input/drivers' failed
make[1]: *** [/tmp/input/drivers] Error 2
Makefile:1467: recipe for target '_module_/tmp/input' failed
make: *** [_module_/tmp/input] Error 2
make: Leaving directory '/opt/apollolake/build'
root@XPE-MODULE-COMPILE:~/arpl-modules/src#
profile image 3등
화정큐삼 글쓴이 2023.03.19. 12:09

[4.4.302+ 모듈 컴파일 방법]

- Ubuntu 16.04 설치

ubuntu-16.04.7-desktop-amd64.iso


- sshd 활성
sudo apt-get update
sudo apt-get install ssh
sudo service ssh start; sudo service ssh status
sudo ufw allow ssh ; sudo ufw status

- 깃 설치
sudp apt-get install git
- 4.4.180+ 모듈 git 다운로드
git clone https://github.com/fbelavenuto/arpl-modules.git

[fbelavenuto 님 repo에 fork한후 본인 repo 로 받으시는게 좋습니다. SSH키 생성필수]

git clone git@github.com:PeterSuh-Q3/arpl-modules.git

[커널 컴파일 준비]
1. 커널 컴파일러 설치
sudo apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev

2. 커널 패키지 관리자 설치
sudo apt-get install linux-generic

3. 커널 소스코드를 다운로드하고 압축을 해제합니다.
sudo -i
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.302.tar.gz
tar xvfz linux-4.4.302.tar.gz

4. 커널 소스 디렉토리 이동
cd linux-4.4.302

5. 현재 사용 중인 커널의 설정 파일을 복사합니다.
cp /boot/config-$(uname -r) .config

6. 필요한 모듈 설정을 추가하고 커널을 빌드합니다.
make menuconfig # 모듈 설정을 추가할 수 있습니다.
make -j$(nproc) # -j 옵션은 사용 가능한 CPU 코어 수를 사용하도록 지시합니다.

7. docker 설치
chaGPT ubuntu docker 설치 검색

8. XPE 모듈을 컴파일합니다.
cd /root/arpl*/src
PLATFORMS 파일 버전 조정 [4.4.180 -> 4.4.302]
vi complie.sh 수정해서 깃헙의 PLATFORMS curl 다운로드 주석처리 [4.4.180 설정이 다시 내려옴]
./complie.sh

profile image
화정큐삼 글쓴이 2023.03.19. 19:23
https://github.com/PeterSuh-Q3/arpl-modules

디렉토리가 미리 만들어지지 않아서 이상하게 생성이 되긴 했는데,
hwmon-vid.c 쪽 소스에 x86_mask 의 상위 커널버전 호환성 문제가 한군데 있었고
drivers/net/ethernet/aquantia/aq_compat.h 에서 중복선언된 page_ref_count 함수이름 문제
이렇게 2군데만 해결해주니 끝까지 컴파일이 가능했습니다.

당장 시험해볼수 있는 DS3615xs 드라이버로 로더 빌드해서 시험해 봤더니, 먼가 조정이 필요한 부분이 있는것 같습니다.
포맷에러 라고 하는데, 시놀로지용 모듈로 제대로 안만들어 진듯 합니다.
이걸 조정하는 방법을 배워야 하는게 핵심 같습니다.
물어볼 사람이 fabio님 뿐인데, 일단 문의 넣어 봐야 겠네요.^^

[ 3.822815] e1000: Unknown rela relocation: 4
modprobe: ERROR: could not insert 'e1000': Exec format error
[ 4.828201] e1000: Unknown rela relocation: 4
[ 4.828996] e1000: Unknown rela relocation: 4
insmod: can't insert '/lib/modules/e1000.ko': invalid module format
Found Ethernet Interface : pciid 8086d0000100f Required Extension : Searching for matching extension for e1000
profile image
화정큐삼 글쓴이 2023.03.19. 19:34
화정큐삼
이 오류는 모듈의 바이너리 형식이 호환되지 않아서 발생하는 문제입니다. 보통 이 오류는 다른 운영체제에서 빌드된 모듈을 현재 시스템에서 사용하려고 할 때 발생합니다.

시놀로지용 모듈을 빌드할 때, 시놀로지에서 사용하는 리눅스 커널과 호환되는 환경에서 빌드해야 합니다. 시놀로지에서는 자체적으로 리눅스 커널을 커스터마이징하여 사용하므로, 일반적인 리눅스 커널과는 호환되지 않을 수 있습니다. 따라서 모듈을 빌드할 때에는 시놀로지에서 제공하는 SDK를 사용하여 빌드해야 합니다.

만약 모듈을 이미 빌드했고 위와 같은 오류가 발생한다면, 다음과 같은 방법으로 해결할 수 있습니다.

모듈을 다시 빌드합니다.

모듈을 다시 빌드할 때에는 시놀로지에서 제공하는 SDK를 사용하여 빌드해야 합니다. SDK를 다운로드하여 모듈을 다시 빌드한 후에 시도해 보세요.

호환되는 모듈을 찾습니다.

모듈을 다시 빌드하는 것이 어렵다면, 호환되는 모듈을 찾아서 사용할 수 있습니다. 시놀로지 커뮤니티에서 공유하는 모듈 중에서 호환되는 모듈을 찾아서 사용해 보세요.

커널을 업그레이드합니다.

만약 모듈을 사용하기 위해서는 최신 버전의 커널이 필요하다면, 시놀로지에서 제공하는 커널 패키지를 설치하여 커널을 업그레이드할 수 있습니다. 이 경우에도 호환성 문제가 발생할 가능성이 있으므로, 주의해서 진행해야 합니다.
profile image
hilee0602 2023.04.05. 17:00
화정큐삼
대게 Toolchain은 MIPS, ARM과 같이 Embedded System에서 사용하고 일반적은 x86_64 환경에선 build-essential로 설치된 gcc로 충분히 사용이 가능합니다.

다만 모듈을 만드실려면 Kernel Header 및 Kernel Library가 시스템에 있어야 하는데 일전 보니까 시놀로지에는 그게 없는거 같더군요.
(저도 네이티브 헤놀에 docker로 우분투 설치해서 개발 환경 구성했다가 SDK 빌드 후에 계속 Kernel 모듈이 안생겨서 봤더니 시놀로지 OS 자체에 Kernel Header가 없더군요)

4.4.302용 모듈을 만드셔야 한다면 Docker등을 이용해 4.4.302 Kernel을 사용하는 OS를 설치하고 해당 OS 상에서 모듈을 만들어 보시면 어떨까 싶네요.
profile image
화정큐삼 글쓴이 2023.04.05. 17:10
hilee0602

답변 감사합니다.

지금은 시놀로지의 툴체인과 툴킷의 존재도 모두 확인이 되었고 어떻게 활용해야 하는지도 터득한 상태입니다.
https://archive.synology.com/download/ToolChain/toolchain/7.2-63134
https://archive.synology.com/download/ToolChain/toolkit/7.2

이방법을 모두 적용해서 컴파일을 성공했음에도 pocopico님과 7.2 버전은 모듈호환성문제를 아직 해결을 못봤습니다.

7.1 버전은 말씀하신대로 ARPL fabio님이 아주 편하게 만들어주신 도커기반의 컴파일러가 있어서
7.1 / 7.2 용 툴체인과 툴킷을 도커를 통해 다운받을 수 있도록 컴파일 환경을 다 만들어 주셨습니다.
지금은 여러가지 모듈 호환성을 고려해 가면서 ARPL 과 TCRP 모듈을 모두 모아서 컴파일을 잘 하고 있는 상황입니다.

https://github.com/PeterSuh-Q3/arpl-modules

관심 가져 주셔서 감사합니다. ^^

profile image
hilee0602 2023.04.05. 17:12
화정큐삼
역시 제가 고수님 앞에서 주름을 잡았군요^^;;;
늘 응원 하고 있습니다~!! ㅎㅎ

댓글 쓰기 권한이 없습니다. 로그인

취소 댓글 등록

cmt alert

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story

주간 조회 수 인기글

주간 추천 수 인기글

분류 제목 글쓴이 날짜 조회 추천
코딩테스트 ㅘ!!!!!! 9 Jasons 23.08.24.15:40 140 +2
코딩테스트 으어... 대회 시작 1시간 하고도 정확히 15분전 2 Jasons 23.08.13.12:45 243 +1
코딩테스트 NYPC 2023 2 Jasons 23.08.09.14:13 173 +1
코딩테스트
image
Jasons 23.08.24.15:40 140 +2
코딩테스트
normal
Jasons 23.08.13.12:45 243 +1
코딩테스트
image
Jasons 23.08.09.14:13 173 +1
Python
normal
mjk 23.08.03.20:22 226 +3
Linux
image
hilee0602 23.04.05.16:34 237 +1
Linux
image
화정큐삼 23.03.19.08:46 304 0
Docker
normal
장작_범댕이 23.02.19.14:21 299 0
정보
image
동기 23.01.16.09:16 220 0
정보
image
달소 23.01.06.14:50 1541 0
정보
image
동기 23.01.04.16:14 205 +2