그리고 make 해서 나오는 dtb를 롬 소스폴더로 데꼬가서 make kernel해주면 out/target 폴더에 뙇.. 패스트부트로 올려주면.. -> nexus 5의경우 이렇습니다..
추가 3 - 외부에서 연결
Rinetd를 이용하여 포트를 바인딩(?)시켜주어 연결하는 방법을 알려드리겠습니다.
VPN을 통해 연결하는 방법은 속도가 느려 추천드리지 않습니다. 특히 한국에 보급(?)이 제일 많이된 IpTime 공유기의 경우 VPN서버 설정의 경우 매우 간단한데 외부에서 연결할시 외부WiFi도 IpTime 공유기일시 ip주소 충돌때문에 연결도 제대로 되지 않아 집에서 이용하는 공유기나 외부접속 공유기의 게이트웨이 IP주소도 변경해주어야됩니다.. 글만 봐도 귀찮죠?
여튼 본론으로 돌아가 Rinetd는 Linux, Windows 운영체제에서 실행할수 있으며 들어오는 특정 IP(Localhost)의 포트로 들어오는 신호를 Localhost(자기자신;실행되고 있는 컴퓨터)나 특정 IP의 특정 포트로 변경하여 연결되도록 해주는 프로그램입니다. 뭐 대충 포트포워딩, 포트브릿지(?)정도로 생각 하시면 될듯합니다..(정확한 표현은 아닙니다.)
(또한 Windows의 파일공유도 같은 방법으로 적용이 가능한데 연결하는쪽에선 samba포트를 바꿔주는 뻘짓을 해줘야 됩니다..(루프백))
우선 파일첨부에 있는 파일을 받습니다.
받으신후 여러 파일들이 존재하는데(기존 사용하시던분이 설정한 그대로..)그중 우리가 필요한 것은 rinetd, rinetd.conf파일과 기타등등 라이브러리 파일들 뿐입니다. 콘솔창이 뜨는게 거슬린다면 가려주는 프로그램을 사용하셔도 됩니다만 저는 안씁니다.. 고로 방법도 안알려드립니다.(실은 어케하는지 모르겠음.. W8 호환 안대는듯..)
압축을 푼 후 나온 폴더속 rinetd폴더를 적당한 곳에 위치시킵니다.
메모장을 킵니다. (팁:[Win]키 + [R]키 - notepad 입력 - [Enter])
rinetd.conf파일을 메모장으로 끌어옵니다.
0.0.0.0 7139 localhost 139
0.0.0.0 7445 localhost 445
왼쪽은 들어오는 신호
오른쪽은 바꾸어준후 내보낼 신호
입니다.
0.0.0.0 포트 는 모든 들어오는 신호를 받아옵니다.
특정 포트에서 들어오는 신호만 받고싶다면 특정IP주소 포트 를 입력해주면 됩니다. 포트는 자신의 컴퓨터에서 열려있는 포트중 아무거나 입력하시면 됩니다.
localhost는 실행되고있는 자기 자신, 컴퓨터를 의미합니다.
만약 컴퓨터가 두대여서 한컴퓨터는 계속 켜두고 다른 컴퓨터로 연결되게 하려면 목표IP주소 포트 를 입력해주시면 됩니다. 여기서 CIFS를 이용하려면 포트에 445를 입력해줍니다.
원래 CIFS(Common Internet File System)는 2011년 갤럭시 S 1때부터 커스텀 커널에 추가되어 몇 유저들이 사용하던 기능이었었는데요,(이때당시엔 리눅스에 대한 개념이 하나도 없었기에 이런게 있었는지도 몰랐죠..) CIFS는 리눅스같은 Windows체계의 운영체제가 아니어도 파일을 samba로 공유하는 호스트에 "마운트"방식으로 연결하는 기능입니다.
여기서 주목할점은 바로 "마운트"방식 입니다.
대게 다른 파일매니져같은데 samba서버에 접속해서 파일전송을 할수 있는 기능들이 있긴합니다만, 이경우 파일주소를 통해 스트리밍 플레이어로 동영상이나 음악재생이 가능하지만 실제 디바이스에 파일이 있는것처럼 이용할수는 없습니다. 하지만 CIFS를 이용하면 지정경로에 마운트되어 디바이스에 물리적으로 연결된것같이(OTG처럼) 스트리밍 플레이어가 아니더라도 이용하실 수 있게 됩니다.(Android/obb폴더로 마운트시키면 용량확보에 좋겠죠. 하지만 네트워크 속도영향과 불안정한 점이 있으므로 가급적 피하는게...)
준비물
우선 CIFS모듈이 포함된 커널 혹은 자신의 기계에 맞게 컴파일된 모듈파일(cifs.ko), 연결할 대상(HOST;Windows탐색기에서 우클릭 - [속성] - [공유]탭 - [고급 공유] - [선택한 폴더를 공유], 공유이름설정, [권한]등등 - [확인] - [적용]), 안드로이드폰에서 터미널에뮬레이터나 ADB연결, SSH, Scripter등을 통한 명령어 입력환경, Busybox 최신버젼(busybox installer를 이용합니다. JRummy껀 업데이트가 안되는듯합니다..),SuperSU 1.93이상(핵심은 이겁니다. 1.93부터 SELinux적용되어있습니다.)
cifs모듈에 관한 고찰..
CIFS를 이용하려면 cifs모듈이 커널에 내장되어있거나 기종에 맞게 누군가가 이미 컴파일해놓은 cifs.ko모듈파일 혹은 직접 컴파일하는 방법을 거쳐야 이용할수있습니다.
저는 모듈이 내장되어있는지도 모르고 앱에서 없다고 오류인식하는걸 그대로 믿고서 ko파일을 찾아보았는데도 없어서 직접 컴파일까지 해보았습니다..
여튼 커널에 내장되어있는지 확인하는 방법은
터미널 에뮬레이터나 ADB에서
필요시 $ su
$ cat /proc/filesystems
을 하시면 ($는 계정상태입니다. 안적으셔도 됩니다.)
nodevsysfs
nodevrootfs
nodevbdev
nodevproc
nodevcgroup
nodevtmpfs
nodevdebugfs
nodevsockfs
nodevpipefs
nodevanon_inodefs
nodevrpc_pipefs
nodevdevpts
ext3
ext2
ext4
nodevramfs
vfat
nodevnfs
nodevnfs4
nodevnfsd
nodevcifs
fuseblk
nodevfuse
nodevfusectl
nodevselinuxfs
접어논것과 비슷한 결과를 보실수 있습니다.
여기서 nodev cifs가 있다면 가능한겁니다. (있으면 바로 다음 섹션으로 넘어가세요.)
없으시다면 구글링이나 네이버링해서 cifs.ko 파일(정확하게 같은기종이어야되는지는 모르겠는데 사용하고있는 커널과 같은 버젼, 아키텍쳐로 만들어진 모듈파일만 사용가능합니다.)을 찾아서 # insmod /sdcard/[경로]/cifs.ko 명령어로 로드시켜야됩니다. 아무 cifs.ko파일 가져다가 쓰시면 불러올수없다고만 뜹니다..
구글에서 samba.org를 찾아 들어가셔서 우측메뉴에 linux.samba.org인가 로 가셔서 cifs 소스를 다운받아서 커널폴더에 넣고 Android.mk파일을 구성하고 머리터지는 일을 해야됩니다.
하지만 이건 이미 존재하는 소스에서 긁어오는게 제일 편하죠!
추후 필요하신분이 계시다면 작업 파일에서 따로 긁어서 올려드리겠습니다. (계속 진행하시고싶으시면 댓글을, 아니라면 포기하시면 됩니다..)
명령어 입력
터미널 에뮬레이터나 ADB등으로 입력합니다.
연결시
$ su --mount-master
# busybox mount -t cifs none /storage/cifs -o unc=\\\\192,168.x.x\\sharename,ip=192.168.x.x,noserverino,iocharset=utf8,file_mode=0777,dir_mode=0777,username=AccountName,password=AccountPassword
연결 해제시
# umount /storage/cifs
$은 일반계정상태, #은 root계정상태입니다. 고로 따라적지 아니합니다..
설명들어갑니다.
1) su
1-1) --mount-master :이건 안드로이드 4.2부터 멀티유저라는 개념과 SELinux라는 개념이 들어가면서부터 마운트시 마운트시킨 셸이나 앱에서만 마운트된것이 확인가능하고 그 외의 어플에서는 아무런 파일도 보이지 않게 되는데 이것을 해결하기위해 SuperSU제작자이신 Chainfire님이 따로 만드신 옵션입니다. G+에 가면 해당 내용에대한 언급이 있습니다.
2-2) none :원래 여기에 HOST의 주소와 경로를 적어줬었는데 어떤 이유에서인지 에러가 납니다. CIFS모듈이 업데이트되면서 버그가 생겼나봅니다..(직접 컴파일해봤는데.. 그런거같음..) unc에서 다시 다룹니다.
2-3) /storage/cifs :마운트될 경로를 지정합니다. (AOSP는 엿같아서 커널도 수정해야됩니다. ㅋ..)
2-4) -o :옵션을 줍니다.
2-5) unc=\\\\192.168.x.x\\sharename : 위에 none이라고 적은데서 언급했죠. 정확한 이유는 모르겠지만 로그들을 뒤져보았을때 none이라 쓴곳에 주소와 경로를 적어도 unc로 값을 받아오질 못하더군요. 그래서 unc라는 옵션에 직접 넣어줍니다. 192.168.x.x는 호스트의 주소고 sharename은 준비물에서 설정한대로 설정한 폴더이름입니다. 윈도우에서 공유한 폴더는 대게 소문자로 변환됩니다. 역슬래시(\)는 꼭 두번씩 씁니다. 이유는 모릅니다.. 윈도우에서도 네트워크 연결할때 \\쓰듯이 그런건가봅니다..
2-6) ip=192.168.x.x : 궂이 안적으셔도 됩니다. ip를 적습니다.
2-7) noserverinio : 이것도 궂이 안적으셔도 됩니다. 로그를 보면 뭐라뭐라하면서 이 옵션을 쓰는걸 추천한다고 합니다..
2-8) iocharset=utf8 : 이건 꼭 적어주셔야됩니다. 한글같은 UTF8문자를 디코딩해줍니다.(글자깨짐방지)
2-9) file_mode=0777,dir_mode=0777 : 읽고 쓰기권한을 주는겁니다. 꼭 해주셔야됩니다. 안하시면 스트리밍플레이정도밖에 못합니다.(읽기만 가능)
2-10) username=AccountName : 윈도우에서 설정했다면 윈도우에서 사용하는 계정을 입력합니다.(윈도우 8/8.1에서 Microsoft계정으로 로그인하시면 사용한 이메일을 적으시면됩니다. ex)cifs@google.com)
2-11) password=AccountPassword : 계정에 대한 비밀번호를 입력합니다. 비밀번호가 없는 경우가 있을지도 모르는데 테스트를 해보지 못해 잘 모르겠습니다. 아예적지말거나 none라고 적어보세요.
옵션줄에서 여러 옵션을 줄땐 ,(쉼표)를 쓰고 띄어쓰지 않습니다.
마운트 해제 또한 su --mount-master 바이너리(?)에서 작업합니다.
설명이 엄청 깁니다..
마무으리
오늘도 뻘짓을 했습니다.
CIFS에 대해서 알게된게 OTG로 사용하던 메모리 용량 꽉참 + 매번 연결하기 귀찮음 + 내장메모리는 폭발 직전 + NAS사면 어떻게 활용하지 + NAS사고싶어..
여튼 이로인해 내장메모리가 32G밖에 되지않는 망할 망치머리(Nexus5-Codename:Hammerhead)가 10TB가 넘어가는 아주 좋은 경험을 하고있고 TitaniumBackup, 음악은 끊김없이 들을수 있고(Flac 초당 131/kbps 전송량이 보이네요. 3메가짜리 음악은 가금씩 그래프 올라가고.. 하지만 로딩시간이 극혐.. 외부에서 사용시 데이터 사용량에 주의 바랍니다.) 용량먹는걸 서버에서 바로 연결할수 있어 편합니다.
실은 사용하는거 자체는 뻘짓이 아니지만
이걸 사용하려면 cifs.ko 모듈이 필요하대서 모듈찾는데 없네?
만들어야되나?
우분투를 깔야야겠네
SSD 용량 꽉찼네
포맷해야지
하드 논갈라야지
깔아야지
기본환경 구축해야지
git clone해야지 - 약 2시간
cifs.c 파일 찾아와야지
테스트컴파일해야지 - 1시간 11분 12초
이걸 어디다 넣어야하지? 아무데나 쪄넣쪄넣
계속 실패 -> 커널에 안넣고 systemimage에 계속 시도 -> 개빠가
Android.mk파일은 또 어케구성하는거지? -> 이해하는데 몇일걸림
모듈은 커널에 넣어야하는거구나! -> 핵빠가
왜 make menuconfig이 않되지 ㅡㅡ make config(?까먹 ㅋㅋ)는 되네
아 이 몇백개가 넘는걸 뻘짓하고있지 구글링 -> 2분만에 답찾음
sudo apt-get install install libncurses5-dev
다시 make menuconfig
좀 뒤적거리니까 cifs모듈이 이미 추가되어있네? 그것도 활성화로? -> 아마 순정커널에서도 될겁니다. (5.0.1-r1;Hammerhead)
ㅁㄴㅇㄻㅇㄻㄴㅇㄹ 그래도 nfs같은 몇개 커마좀 하고 빌드해야지
make - 1분 12초? 2분 12초? 개복치
이게 완성은 아닐텐데 어디다넣지? -> 구글 기술문서
make bootimage - 59초
이제 플래싱!
두둥 내 첫 커스텀커널! -> 개적화..
근데 왜 마운트했는데 내용이 안보이지? -> 이거때문에 한 2주 소비..
구글링 -> 안드로이드 4.2부터 SELinux때문에 zygote가 뭐 샬랄라 dalvik 샬랄라 -> 근데 안드로이드 5인데? art??? -> 수정 코드 적용 실패
으으 부들부들
cifs mount empty라 쳤던가.. 치니까 xda 초짜형님들이 이미 몇차례 질문도 했었는데 확실한 정답은 위 키워드로 찾음..
내용은 SuperSU 1.93 변경내역에 --mount-master쓰면 된다고 적힘..
해봄.. -> 됨.. -> ㅆ..
펼쳐보기 싫으면 이것만 좀 읽어줘
총 비용시간 2.7주
추후 vpn을 통해 외부에서도 연결가능하게하는방법, 커널제작 등 필요할듯한 정보에 대해 포스팅할 계획이 있습니다. -> 아마 요청이 있을시..? -> 군대에 가게되어 빨리 작성해주고 튑니다.. ㅌㅌ.. 게시글 맨 상단 추가 3에 작성했습니다.