TP-LINK Archer C7 을 Openwrt 에서 일부 기능을 구현하여 확인할 일이 생겼다. 


https://wiki.openwrt.org/toh/tp-link/archer-c7-1750


위 official로 build 된 Archer C7 용 binary를 다운로드 받아 보니 2.4GHz, 5GHz 모두 잘 동작했다. 그래서 해당 모델의 openwrt latest source code를 다운로드 받아 아래 과정에 따라 full binary 로 빌드하였다. 


OpenWrt, 전체 기본 Image 만들기


하지만 막상 최신으로 빌드해서 확인해 보니 5GHz 가 동작하지 않는다. 분명 official 과 같은 branch 의 source code를 다운받아서 빌드했는데, 왜 동작하지 않았을까 생각해 보았다. 차이점은 sync한 source code의 revision (coomit) number가 다른거 밖에는 없었다. 이전에 build된 official binary 의 code 와 현재 latest code 사이에 무엇인가 잘못된 코드가 들어 갔으리라고 밖에 생각할 수 없었다. (수정 : 알고보니 5GHz를 위한 kernel module이 제외되어 있었다. 관련글 : http://technote.kr/221)


항상 openwrt binary를 만들 때는 latest 로 당겨서 만들어 왔는데, 상황이 상황인지라 특정 revision(commit) 기반의 binary 생성이 필요하였다. 



1. 동기화하고자하는 Chaos Calmer 15.05.1 의 코드를 다운로드.


아래 명령을 통해 sync 하고자하는 Chaos Calmer 15.05.1을 git clone 한다. (code download)

user@User:~$ git clone -b chaos_calmer git://github.com/openwrt/openwrt.git

Cloning into 'openwrt'...

remote: Counting objects: 360829, done.

remote: Compressing objects: 100% (7/7), done.

remote: Total 360829 (delta 3), reused 3 (delta 2), pack-reused 360820

Receiving objects: 100% (360829/360829), 132.92 MiB | 1.52 MiB/s, done.

Resolving deltas: 100% (241397/241397), done.

Checking connectivity... done.




2. 정상동작한 official binary 의 code base revision(commit) 확인.


https://wiki.openwrt.org/about/history



 Openwrt 의 version Timeline을 확인해보니 stable한 Chaos Calmer 15.05.1 의 code base는 SVN 기준으로 r48532 를 사용하고 있다. 



3. git log를 통해 현재 git clone 한 코드의 base 확인


user@User:~$ cd openwrt/

user@User:~/openwrt$ git log

commit 9a1fd3e313cedf1e689f6f4e342528ed27c09766

Author: Hauke Mehrtens <hauke@hauke-m.de>

Date:   Thu Mar 9 17:17:41 2017 +0100


    CC: script: downlaod: change mirror for kernel.org

    kernel.org now suggests a different mirror address. this one also

    support IPv6 connections and was faster for me.
...... (이하 생략)


2017년 9월 25일 기준으로 확인시 아래와 같은 수정 사항까지 코드에 반영되어 있다. 


만약 cd openwrt 를 하지 않고 git log를 하면 아래와 같이 에러가 발생한다.


user@User:~$ git log

fatal: Not a git repository (or any of the parent directories): .git



 git log를 통해 확인한 것과 같이 최신 코드까지 동기화된 상황이므로 Step 2에서 확인한 이전 base revision 인 SVN r48532 로 돌아가야한다. 



4. SVN r48532 에 맞는 git commit hash 검색


user@User:~/openwrt$ git log --grep 48532

commit 0c335d6ea00af9b32225f72d491e560c1a7cf4ab

Author: Felix Fietkau <nbd@openwrt.org>

Date:   Thu Jan 28 18:26:18 2016 +0000


    openssl: update to 1.0.2f (fixes CVE-2016-0701, CVE-2015-3197)

    

    Signed-off-by: Felix Fietkau <nbd@openwrt.org>

    

    Backport of r48531

    

    git-svn-id: svn://svn.openwrt.org/openwrt/branches/chaos_calmer@48532 3c2



예전에는 코드 관리시 SVN 을 사용하였지만 현재는 git을 사용함으로 이전 SVN revision number를 현재 사용하는 git commit hash로 변환하여 사용하여야 한다. 위와 같이 comment 를 통해 확인이 가능하고, SVN r48532의 경우 0c335d6ea00af9b32225f72d491e560c1a7cf4ab 인 것을 알 수 있다. 



5. base code의 변경    


user@User:~/openwrt$ git checkout 0c335d6ea00af9b32225f72d491e560c1a7cf4ab

Note: checking out '0c335d6ea00af9b32225f72d491e560c1a7cf4ab'.


You are in 'detached HEAD' state. You can look around, make experimental

changes and commit them, and you can discard any commits you make in this

state without impacting any branches by performing another checkout.


If you want to create a new branch to retain commits you create, you may

do so (now or later) by using -b with the checkout command again. Example:


  git checkout -b new_branch_name


HEAD is now at 0c335d6... openssl: update to 1.0.2f (fixes CVE-2016-0701, CVE-2015-3197)


git checkout을 통해 r48532 로 code base 를 변경한다. 



6. code base 변경의 확인


user@User:~/openwrt$ git log

commit 0c335d6ea00af9b32225f72d491e560c1a7cf4ab

Author: Felix Fietkau <nbd@openwrt.org>

Date:   Thu Jan 28 18:26:18 2016 +0000


    openssl: update to 1.0.2f (fixes CVE-2016-0701, CVE-2015-3197)

    

    Signed-off-by: Felix Fietkau <nbd@openwrt.org>

    

    Backport of r48531

    

    git-svn-id: svn://svn.openwrt.org/openwrt/branches/chaos_calmer@48532 3c2


commit 7a4a7932a1cf09ae42b283bb9d8f84171b14108a

Author: John Crispin <blogic@openwrt.org>

Date:   Thu Jan 21 14:17:54 2016 +0000

... (이하 생략)


다시 git log를 해보면 동기화를 한 0c335d6ea00af9b32225f72d491e560c1a7cf4ab 의 log 이력이 최상단에 보이는 것을 알 수 있다. 


위와 같은 방식을 통해 안정화가 확인된 code를 sync할 수 있다.