目前分類:Realtek SDK (17)

瀏覽方式: 標題列表 簡短摘要

image start position

  • check_image_header() 用來找尋所有的表頭,包含 linux 及 rootfs。
  • check_system_image() 用來找尋 linux 表頭位置。
  • check_rootfs_image() 用來找尋 rootfs 表頭位置
  • CODE_IMAGE_OFFSET,CODE_IMAGE_OFFSET2,CODE_IMAGE_OFFSET3 用來記錄 linux 啟始位置,會先檢查。找不到時會根據 config 的 CONFIG_LINUX_IMAGE_OFFSET_START,CONFIG_LINUX_IMAGE_OFFSET_END,CONFIG_LINUX_IMAGE_OFFSET_STEP,來找尋 linux 的位置。
  • ROOT_FS_OFFSET,ROOT_FS_OFFSET_OP1,ROOT_FS_OFFSET_OP2 用來記錄 rootfs 啟始位置,會先檢查。找不到時會根據 config 的 CONFIG_ROOT_IMAGE_OFFSET_START,CONFIG_ROOT_IMAGE_OFFSET_END,CONFIG_ROOT_IMAGE_OFFSET_STEP,來找尋 rootfs 的位置。
  • 所以有重新改變 linux 或 rootfs 的啟始位置時,記得順便變更 CODE_IMAGE_OFFSET 及 ROOT_FS_OFFSET,這樣省略找尋的時間,讓開機快一點點。

ip address

  • boot ip address 是 tftp server ip。
  • tftp server ip 要修改 bootcode_APH60c\boot\init\eth_tftpd.c 的 tftpd_entry()
    if(*ptr == tftp_sign)
            arptable_tftp[TFTP_SERVER].ipaddr.s_addr = *ptr2;       
    else
            arptable_tftp[TFTP_SERVER].ipaddr.s_addr = IPTOUL(192,168,1,97);
    
    #else
            arptable_tftp[TFTP_SERVER].ipaddr.s_addr = htonl((unsigned int)(IPTOUL(192,168,1,6)));
    #endif
    
    arptable_tftp[TFTP_CLIENT].ipaddr.s_addr = htonl((unsigned int)(IPTOUL(192,162,1,116)));
    
  • http server ip address 不用修改,是跟著 tftp server ip address 變更。
  • dhcp server ip 要修改 bootcode_APH60c\boot\init\dhcpd.c 的 dhcps_entry()

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

  • rtl819x\Makefile --> $(MAKE) -C $(DIR_BOARD) image
    所以 make image 直接跳 rtl819x\boards\rtl8197F\Makefile 看即可
  • rtl819x\boards\rtl8197F\Makefile --> $(MAKE) -C $(DIR_LINUX)/rtkload

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

Error opening terminal: xterm.
make: *** [config] Error 1
  • 解決方式
  • export TERMINFO=/lib/terminfo

gzip_wrapper.c:23:18: fatal error: zlib.h: No such file or directory
compilation terminated.
  • 解決方式
  • sudo apt-get install zlib1g-dev

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

執行 iptables -A FORWARD -m physdev --physdev-in wlan1-va0 -d 203.205.128.0/19 -j ACCEPT 卻出現 iptables: No chain/target/match by that name. 的錯誤。

google 許久都找不到答案,檢查 source 發現 linux-3.10/net/netfilter/nf_queue.c 有一段程式碼。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

  • 根據 rtl819x/Makefile 內容,rtl819x/config/genconfig 會產生 Kconfig。
  • 根據 genconfig 的內容,Target 的選項為 rtl819x/boards 內的目錄,所以只要留下必要的即可。
  • 根據 genconfig 的內容,toolchain 的選項為 rtl819x/toolchain 內的目錄,所以只要留下必要的即可。
  • 根據 genconfig 的內容,Board Configuration 的選項為 rtl819x/boards/rtl8197F/board-configuration.in 的文件,只要留下必要的選項即可。
  • etc/linux/busybox/user 的預設 .config 為 rtl819x/boards/rtl8197F/config.busybox-1.13.{Board Configuration} 等等。
  • 比如我選 Board Configuration 為 RTL8197F_8812BR_8367R_GW 則預設為
    1. etc.default
    2. config.busybox-1.13.RTL8197F_8812BR_8367R_GW
    3. config.linux-3.10.RTL8197F_8812BR_8367R_GW
    4. config.users.RTL8197F_8812BR_8367R_GW

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

linux 3.10

  • +Device Drivers
  • ++Character devices
  • +++[*] Unix98 TTY support
  • +++[*] Support multiple instances of devpts

busybox 1.13

  • +Busubox Settings
  • ++General Configuration
  • +++[*] Use the devpts filesystem for Unix98 PTYs
  • +Login/Password Management Utilities
  • ++[*] login
  • ++[*] Support for /etc/nologin
  • ++[*] Support for /etc/securetty
  • +Networking Utilities
  • ++[*] telnetd
  • ++[*] Support standalone telnetd (not inetd only)

/etc/init.d/rcS

  • mount -t devpts devpts /dev/pts
  • /bin/telnetd &

參考資料


台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

  • Apr 13 Thu 2017 18:02
  • romfs

  • rtl819x/Makefile 內的 DIR_BOARD 指向 $(DIR_ROOT)/target
  • rtl819x/target 連結到 rtl819x/boards/rtl8197F
  • rtl819x/Makefile 會執行 $(MAKE) -C $(DIR_BOARD) romfs
  • rtl819x/boards/rtl8197F/Makefile 會執行 $(ROMFSINST) etc /etc
  • rtl819x/boards/rtl8197F/etc 連結到 rtl819x/boards/rtl8197F/etc.default
  • 所以只要修改 rtl819x/boards/rtl8197F/etc.default 內的檔案即可.
  • rcS 要修改 rtl819x/boards/rtl8197F/etc.default/init.d/rcS_GW

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

  • __INIT (head.S)
  • init_arch()
  • +start_kernel() -- return_addr=0
  • ++doBooting(flag, addr=0, ....)
  • +++goToLocalStartMode(addr=0, ...)

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

form

  • main()
  • loop()
  • process_requests()
  • write_body()
  • init_form()
  • handleForm()
  • 比對 root_form 的字串,再執行相對應的函數。

asp

  • main()
  • loop()
  • process_requests()
  • read_header()
  • process_header_end()
  • init_get2()
  • handleScript()
  • 比對 root_asp 的字串,再執行相對應的函數。

firmware upload

  • formUpload()
  • 比對 FW_HEADER_WITH_ROOT(cr6c),設定 isValidfw=1 及 flag=1。
  • fwChecksumOk() 檢查 checksum。
  • 設定 isFWUPGRADE=1,導頁到 COUNTDOWN_PAGE(/countDownPage.htm)

COUNTDOWN_PAGE

  • main()
  • loop()
  • process_requests()
  • read_header()
  • process_header_end()
  • translate_uri()
  • 因為 isFWUPGRADE=1,所以設定 isREBOOTASP=1 及 isFWUPGRADE=2。
  • 因為 isREBOOTASP=1 及 isFWUPGRADE!=0,在 loop() 會跳到 ToUpgrade 執行 FirmwareUpgrade()。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

  • #define COMPRESS_MIB_SETTING
    #define MIB_TLV

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

  • +rtkxxpart_init() - drivers/mtd/rtkxxpart.c
  • ++register_mtd_parser() - drivers/mtd/mtdparts.c
  • ----------------------------
  • m25p_probe() - drivers/mtd/devices/m25p80.c
  • +mtd_device_parse_register() - drivers/mtd/mtdcore.c
  • ++parse_mtd_partitions() - drivers/mtd/mtdparts.c
  • +++parse_fn() - drivers/mtd/mtdparts.c
  • ===rtkxxpart_parse() - drivers/mtd/rtkxxpart.c
  • *** 根據 rtl819x_parts 來切 partition
  • *** 1st partition 大小為 CONFIG_RTL_ROOT_IMAGE_OFFSET.
  • *** 2nd partition 大小為 RTK_FLASH_SIZE-CONFIG_RTL_ROOT_IMAGE_OFFSET.
  • ++add_mtd_partitions() - drivers/mtd/mtdparts.c
  • +++add_mtd_device() - drivers/mtd/mtdcore.c

CONFIG_RTL_ROOT_IMAGE_OFFSET

  • Machine selection
  • +System Configuration
  • ++root image offset in flash

RTK_FLASH_SIZE

  • Machine selection
  • +System Configuration
  • ++Size of Flash

.................

  • +rtk_nand_profile() - drivers/mtd/rtk_nand_sd.c
  • ++mtd_device_parse_register() - drivers/mtd/mtdcore.c
  • +++parse_mtd_partitions() - drivers/mtd/mtdparts.c
  • ++++get_partition_parser() - drivers/mtd/mtdparts.c
  • +++add_mtd_partitions() - drivers/mtd/mtdparts.c
  • ++++allocate_partition() - drivers/mtd/mtdparts.c

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

反查
  • 透過 iwpriv ra0 show stainfo 來反查 MCS 的值
  • ap_cfg.c: pEntry->HTPhyMode.field.MCS
讀值設定
  • 設定值存在 /etc/Wireless/RT2860/RT2860.dat。
  • rt_profile.c: RTMPReadParametersHook()
  • cmm_profile.c: RTMPSetProfileParameters()
  • cmm_profile.c: HTParametersHook()
nvram 儲存值
  • WirelessMode: 設定 wireless mode,比如 11b,11b/g,11b/gn。
    driver 值存在 pAd->ApCfg.MBSSID[i].PhyMode, pAd->CommonCfg.PhyMode 及 pAd->CommonCfg.DesiredPhyMode。
  • FixedTxMode: CCK,OFDM,HT,作用不明。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

ipsec.conf

# ipsec.conf - strongSwan IPsec configuration file

config setup

conn %default
        authby=secret
        keyexchange=ikev1
        mobike=no
        ike=aes128-sha1-modp1024
        esp=aes128-sha1
        left=172.16.9.21
        leftsubnet=192.168.11.0/24
        leftfirewall=yes

conn RTX1000
        right=172.16.9.22
        rightsubnet=192.168.22.0/24
        auto=start

ipsec.secrets

# ipsec.secrets - strongSwan IPsec secrets file

: PSK "abcd1234"

Yamaha config

console character ascii
ip route default gateway 172.16.9.254
ip route 192.168.11.0/24 gateway tunnel 1
ip lan1 address 192.168.22.1/24
ip lan2 address 172.16.9.22/24
ip lan2 nat descriptor 1
tunnel select 1
 ipsec tunnel 101
  ipsec sa policy 101 1 esp aes-cbc sha-hmac
  ipsec ike group 1 modp1024
  ipsec ike local address 1 172.16.9.22
  ipsec ike pre-shared-key 1 text abcd1234
  ipsec ike remote address 1 172.16.9.21
 tunnel enable 1
tunnel select none
nat descriptor type 1 masquerade
nat descriptor address outer 1 172.16.9.22
nat descriptor address inner 1 192.168.22.1-192.168.22.254
nat descriptor masquerade static 1 1 172.16.9.22 udp 500
nat descriptor masquerade static 1 2 172.16.9.22 esp
dhcp service server
dhcp scope 1 192.168.22.100-192.168.22.254/24
dns server 8.8.8.8

iptables


雖然已經設定 leftfirewall=yes,strongSwan 會自動設定 firewall,但是還缺少一些設定。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

整合

  • 將 gmp-6.1.0.tar.bz2 解壓到 user 目錄。
  • 修改 user/Makefile,在 # application 下面新增一行。
    # application
    app_y += gmp-6.1.0
    
  • 修改 user/Makefile,在 prepare: 下面新增數行。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

修改 buildlin.sh

  • 刪除 if [ ! -f /usr/include/gmp.h ]; 這一整段。我是自己 build gmp for mips,不能用 x86 版本。
  • export PREFIX=../rtl819x/toolchain/msdk-4.4.7-mips-EB-3.10-0.9.33-m32t-131227b
  • export DESTDIR=/tmp/openswan
  • export ARCH=mips
  • export OSDEP=linux
  • export CC=$PREFIX/bin/mips-linux-gcc
  • export GCC=$PREFIX/bin/mips-linux-gcc
  • export LD=$PREFIX/bin/mips-linux-ld
  • export RANLIB=$PREFIX/bin/mips-linux-ranlib
  • export AR=$PREFIX/bin/mips-linux-ar
  • export AS=$PREFIX/bin/mips-linux-as
  • export STRIP=$PREFIX/bin/mips-linux-strip
  • export LD_LIBRARY_PATH=$PREFIX/lib/gcc/mips-linux-uclibc/4.4.7/
  • export PATH=$PATH:$PREFIX/bin
  • export USERCOMPILE="-fPIC -I../gmp-6.1.0 -I$PREFIX/include -L$PREFIX/lib"
  • export USERLINK="-L../gmp-6.1.0/.libs"
  • export KERNELSRC=../rtl819x/linux-3.10

主要是參考 CROSSCOMPILE.sh,這個檔案是寫給 arm 用的,但我的是 mips,所以需要小修改。

編譯

  • 修改 buildlin.sh
  • 執行 buildlin.sh
  • 編譯出來的檔案都放在 OBJ.linux.mips,所以只要把該目錄刪除就相當於做 make clean。
  • 如果要做 install,要修改 buildlin.sh,make USE_OBJDIR=true programs 改成 make USE_OBJDIR=true programs install。

問題排除

 CC      /home/enos/FGN-1000/openswan-2.6.43.1/modobj26/ipsec.mod.o
/home/enos/FGN-1000/openswan-2.6.43.1/modobj26/ipsec.mod.c:8: error: variable '__this_module' has initializer but incomplete type
/home/enos/FGN-1000/openswan-2.6.43.1/modobj26/ipsec.mod.c:9: error: unknown field 'name' specified in initializer
/home/enos/FGN-1000/openswan-2.6.43.1/modobj26/ipsec.mod.c:9: warning: excess elements in struct initializer
/home/enos/FGN-1000/openswan-2.6.43.1/modobj26/ipsec.mod.c:9: warning: (near initialization for '__this_module')
/home/enos/FGN-1000/openswan-2.6.43.1/modobj26/ipsec.mod.c:10: error: unknown field 'init' specified in initializer
/home/enos/FGN-1000/openswan-2.6.43.1/modobj26/ipsec.mod.c:10: warning: excess elements in struct initializer
/home/enos/FGN-1000/openswan-2.6.43.1/modobj26/ipsec.mod.c:10: warning: (near initialization for '__this_module')
/home/enos/FGN-1000/openswan-2.6.43.1/modobj26/ipsec.mod.c:14: error: unknown field 'arch' specified in initializer
/home/enos/FGN-1000/openswan-2.6.43.1/modobj26/ipsec.mod.c:14: error: 'MODULE_ARCH_INIT' undeclared here (not in a function)
/home/enos/FGN-1000/openswan-2.6.43.1/modobj26/ipsec.mod.c:14: warning: excess elements in struct initializer
/home/enos/FGN-1000/openswan-2.6.43.1/modobj26/ipsec.mod.c:14: warning: (near initialization for '__this_module')
make[3]: *** [/home/enos/FGN-1000/openswan-2.6.43.1/modobj26/ipsec.mod.o] Error 1
make[2]: *** [modules] Error 2
make[2]: Leaving directory `/home/enos/FGN-1000/fib003_res/rtl819x/linux-3.10'
make[1]: *** [module26] Error 2
make[1]: Leaving directory `/home/enos/FGN-1000/openswan-2.6.43.1'
make: *** [module] Error 2

這是因為 kernel module 動態載入功能沒開啟,把 Enable loadable module support 打開即可。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

build pgen

  • mkdir build.pc
  • cd build.pc
  • ../configure
  • make Parser/pgen

因為在編譯 python 時,會用到本身的 pgen,但是 cross compile 編出來的當然不能用,只能先編一套 pc 版的出來。

build python

  • 修改 Makefile.pre.in,把 pgen 換成 pc 版本。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

Linux Kernel Configuration

Networking support  --->
  Networking options  ---> 
[*] Transformation user configuration interface
[*] PF_KEY sockets
[*] TCP/IP networking
  [*] IP: advanced router
  [*] IP: policy routing
  [*] IP: AH transformation
  [*] IP: ESP transformation
  [*] IP: IPComp transformation
  [*] IP: IPsec transport mode
  [*] IP: IPsec tunnel mode
  [*] IP: IPsec BEET mode
[*] Network packet filtering framework (Netfilter) --->
      Core Netfilter Configuration --->
  xx[ ] IPSEC protocol support
    [*] Netfilter Xtables support
    ??[*] "esp" match support
      [*] IPsec "policy" match support
      IP: Netfilter Configuration  --->
    [*] IP tables support (required for filtering/masq/NAT)
    ??[*] "ah" match support

IPSEC protocol support 不可以選,在 realtek SDK 會造成 kernel panic,其它 SDK 我就不知了。

編譯

CC=/home/enos/FGN-1000/fib003_res/rtl819x/toolchain/msdk-4.4.7-mips-EB-3.10-0.9.33-m32t-131227b/bin/mips-linux-gcc \
CXX=/home/enos/FGN-1000/fib003_res/rtl819x/toolchain/msdk-4.4.7-mips-EB-3.10-0.9.33-m32t-131227b/bin/mips-linux-g++ \
STRIP=/home/enos/FGN-1000/fib003_res/rtl819x/toolchain/msdk-4.4.7-mips-EB-3.10-0.9.33-m32t-131227b/bin/mips-linux-strip \
AR=/home/enos/FGN-1000/fib003_res/rtl819x/toolchain/msdk-4.4.7-mips-EB-3.10-0.9.33-m32t-131227b/bin/mips-linux-ar \
RANLIB=/home/enos/FGN-1000/fib003_res/rtl819x/toolchain/msdk-4.4.7-mips-EB-3.10-0.9.33-m32t-131227b/bin/mips-linux-ranlib \
CFLAGS="-I/home/enos/FGN-1000/gmp-6.1.0" \
LDFLAGS="-L/home/enos/FGN-1000/gmp-6.1.0/.libs" \
./configure --host=mips-linux --prefix=/tmp/strongSwan --enable-static=yes --enable-shared=yes \
--with-linux-headers=/home/enos/FGN-1000/fib003_res/rtl819x/linux-3.10/include/uapi

with-linux-headers 這個要指向 linux kernel 的 include,但是要指向 uapi 這個目錄才對;還有一定要用 SDK 的 linux kernel,不可以用 strongswan 的,會造成不可預期的問題。

台南小新 發表在 痞客邦 PIXNET 留言(1) 人氣()