이 방식을 사용하면 바로 태블릿에 설치 가능한 형태로 빌드된다.

커널 소스 혹은 defconfig를 수정한 후 사용하고자 할 때 유용하다

빌드 방법 원문 : https://wiki.lineageos.org/devices/gta4xlwifi/build

0. vm에 ubuntu 18.04.6 설치 (하드 용량은 넉넉히 500기가 정도)

200기가로 빌드 불가능했음

램은 20기가 정도 설정

1. 의존 패키지 설치

sudo apt-get install openssh-server libwxgtk3.0-dev bc bison build-essential ccache curl python flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5 libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev vim

2. adb 설치

https://dl.google.com/android/repository/platform-tools-latest-linux.zip

unzip platform-tools-latest-linux.zip -d ~

~/.profile에 아래 추가

# add Android SDK platform tools to path
if [ -d "$HOME/platform-tools" ] ; then
    PATH="$HOME/platform-tools:$PATH"
fi

3. 디렉토리 생성

mkdir -p ~/bin
mkdir -p ~/android/lineage

4. repo 설치

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
git config --global user.email "abc@lol.com"
git config --global user.name "kim kim"

5.

export USE_CCACHE=1
export CCACHE_EXEC=/usr/bin/ccache

6. ~/.bashrc 에 아래 추가 

ccache -M 50G

source ~/.profile 실행

7. 리니지OS 소스 전체 다운로드 (OS+소스 =  기가)

cd ~/android/lineage
repo init -u https://github.com/LineageOS/android.git -b lineage-18.1
repo sync

8. 갤럭시 탭 S6용 커널 다운로드

source build/envsetup.sh
breakfast gta4xlwifi

중간에 vendor 어쩌고 Makefile에러가 발생하면 9번 항목 실행후 breakfast 재시도

(대부분의 makefile에러는 make clean과 breakfast반복으로 해결 가능)

breakfast중 sepolicy.mk 에러가 발생한다면

cd ~/android/lineage/device
mkdir samsung_slsi
cd samsung_slsi
git clone https://github.com/LineageOS/android_device_samsung_slsi_sepolicy
mv android_device_samsung_slsi_sepolicy sepolicy

이 후 make clean 후 breakfast 재시도

9. ubuntu vm에 태블릿 연결 후 태블릿에서 충전이 아닌 PTP로 설정

주의 : adb shell에 su권한이 없으면 파일 복사를 실패함 -> 개발자 옵션에서 디버깅 시 루트 권한 사용 반드시 체크

cd ~/android/lineage/device/samsung/gta4xlwifi
./extract-files.sh

10. 커널 보호 기능 해제

~/android/lineage/kernel/samsung/gta4xl/arch/arm64/configs​/exynos9611-gta4xlwifi_defconfig 편집

아래의 각 라인을 찾아 y를 n으로 수정

(그외 참조 : https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)

CONFIG_EXYNOS_KERNEL_PROTECTION=y  
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
CONFIG_EXYNOS_CONTENT_PATH_PROTECTION=y
CONFIG_HAVE_ARCH_SECCOMP_FILTER=n

https://codetronik.tistory.com/155 참조하여 소스도 수정하여야 한다.

11. 빌드

cd ~/android/lineage
source build/envsetup.sh (커널소스 재빌드 시)

brunch gta4xlwifi

12. 출력 파일 확인

cd $OUT

존재 여부 확인 : recovery.img / lineage-18.1-20220418-UNOFFICIAL-gta4xlwifi.zip 

13. 태블릿에 롬 설치 후 adb shell 접속 후 dmesg > grep exynos로 아래의 로그가 뜨는지 확인 (뜨면 defconfig 수정 실패한 것임)

[    0.371387] exynos_protect_kernel_text: Kernel text start VA(0xffffff8008188000), PA(0x80188000)
[    0.371398] exynos_protect_kernel_text: Kernel text end VA(0xffffff8008e28000), PA(0x80e28000)

에러 유형은 dmesg에서 확인할 수 있다.

./insmod 1.ko

1) 에러 유형: 커널 컴파일 시 컴파일러를 android-aach64를 사용하여야 한다. android용이 아니면 에러가 발생한다.

2) 에러 유형: 커널 모듈과 커널 버전이 완전히 일치하여야 한다.

- lkm 버전 확인 : modinfo [lkm.ko]

- 리눅스 커널 버전 확인 : cat /proc/version

insmod: failed to load 1.ko: Invalid argument

(dmesg) 1.ko : disagrees about version of symbol printk

(demsg) 1.ko : Unknown symbol printk (err -22)

 

에러 유형: 커널 모듈과 커널 버전이 완전히 일치하여야 한다.

insmod: failed to load 1.ko: Exec format error

(dmesg) 1.ko : disagrees about version of symbol module_layout

 

에러 유형 : 삼성 단말기에선 LKM을 허용하지 않음 -> 이 경우, 우회하거나 커스텀 os를 새로 설치하여야 한다.

insmod: failed to load 1.ko: Exec format error

(dmesg) LKM is not allowed by Samsung security policy.

0. ubuntu 20.04.4 LTS x64

1. 의존 패키지 설치 Install Dependent Packages (defconfig 및 menuconfig 빌드를 위함)
sudo apt-get install build-essential libncurses5-dev python

2. 커널 소스 다운로드 Download the appropriate kernel source for your device.
Galaxy Tab S6 Lite : git clone https://github.com/LineageOS/android_kernel_samsung_gta4xl

3. 크로스 컴파일러 다운로드 후 경로 설정 Set path after downloading cross-compiler
git clone https://github.com/Shubhamvis98/toolchains

export PATH="/home/code/toolchains/clang-r428724/bin:/home/code/toolchains/aarch64-linux-android-4.9/bin:$PATH"
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-android-
export CLANG_TRIPLE=aarch64-linux-gnu-

4. 커널 소스 디렉토리로 이동 Go to the kernel source path
make clean
make mrproper
make exynos9611-gta4xlwifi_defconfig
make menuconfig  -> 실행 후 <Save> 클릭 

5. 컴파일 Build it
make -j16 CC=clang

6. 커널 소스 수정 (오류 발생 시) Modifying kernel sources (in case of error)
Open Makefile


KBUILD_CFLAGS   := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
   -fno-strict-aliasing -fno-common -fshort-wchar \
   -Werror-implicit-function-declaration \
   -Wno-format-security \
   -Werror \    <------------- 해당 라인 삭제 delete this line
   -std=gnu89

+ Recent posts