diff --git a/README.md b/README.md new file mode 100644 index 0000000..c408be5 --- /dev/null +++ b/README.md @@ -0,0 +1,52 @@ + +## [Fusing SD] +--------------------------- + +* Fusing SD 만드는 법(Boot SD 겸용) + + release 폴더의 mk-fusingsd.sh 실행 ( Default DEV_NAME : /dev/mmcblk0 ) 인자로 DEV_NAME 변경 가능함 + +* Bootcmd 모드에서 아래 명령을 입력하면 Fusing Mode로 SD부팅함. + + # run fw + +* run fw 를 안하면 보통의 부팅가능한 SD카드로 사용가능하다. run fw시 bootargs_ram 에 fusing=1 이라는 값이 추가되어 커널에서 해당 내용을 파싱하여 /root/.falinux/mk-emmc-fusing.sh 실행함 + + +## [Fusing SD] +--------------------------- + +* JIG (Test 관련) + + eMMC 에 부트이미지를 Fusing 후 처음 부팅을 하게 되면 /etc/init.d/S83fusing 에서 + /root/.falinux/prime_jig/.complete 파일의 유무를 체크 하여 /root/.falinux/prime_jig/prime_jig.sh 스크립트를 실행하게 된다. + (.complete 가 없으면 Prime JIG 스크립트를 실행하며 완료되면 .complete 파일을 생성하여 다음 부팅부터는 JIG 가 실행되지 않도록 한다.) + JIG 결과는 /root/.falinux/prime_jig/result_log 파일로 저장된다. + + + +## [파티션] +--------------------------- + + start size desc + ---------- -------- ------------------- + 0-MB 128-MB raw area + 128-MB 128-MB partition#1, ext3 : BOOT0 + 256-MB 256-MB partition#2, ext4 : SYSTEM + 512-MB 512-MB partition#3, ext4 : FALINUX + 1024-MB all partition#4, ext4 : PRIME + + ------------------------------------------ + 00-MB 128-MB reserved area + ------------------------------------------ + start size start block size(bs = 512) + U-boot : 1KB 640KB ( 0x2 0x500 ) + Logo : 1MB 4.5MB ( 0x800 0x2400 ) + DTB : 5.5MB 128KB ( 0x2C00 0x100 ) + KERNEL : 6MB 7MB ( 0x3000 0x3800 ) + RAMDISK : 14MB 64MB ( 0x7000 0x20000 ) + + + + + diff --git a/scripts/prime_jig.sh b/scripts/prime_jig.sh new file mode 100755 index 0000000..b1c1d4a --- /dev/null +++ b/scripts/prime_jig.sh @@ -0,0 +1,466 @@ +#!/bin/bash + +C_LRED='\033[1;31m' +C_LGREEN='\033[1;32m' +C_LCYAN='\033[1;36m' +C_NC='\033[0m' +C_BLINK='\033[5m' +C_BOLD='\033[1m' + + +PING_ADDR="192.168.10.1" +MAC_ADDR="" +ETH_NAME="eth0" +SUMMARY_PATH="/tmp/list" +JIG_PATH="/root/.falinux/prime_jig/" +RESULT_LOG="${JIG_PATH}result_log" +THREAD_FUNC_SCRIPT="${JIG_PATH}thread_func.sh" +FRAM_TEST_APP="${JIG_PATH}fram_test" +COMPLETE_TEST_NAME="" + +function Init() +{ + + if [ -f "${SUMMARY_PATH}" ]; then + rm -rf ${SUMMARY_PATH} + fi +} + +function summary() +{ + clear + echo -e "" + echo -e "============================" + echo -e " Test Summary " + echo -e "============================" + cat $SUMMARY_PATH + echo -e "============================" + echo -e " MAC: ${MAC_ADDR}" + echo -e "============================" + echo -e "" + echo -e "" +} + +function save_result() +{ + echo -e "" >> ${RESULT_LOG} + echo -e "============================" >> ${RESULT_LOG} + echo -e " Test Summary " >> ${RESULT_LOG} + echo -e "============================" >> ${RESULT_LOG} + cat $SUMMARY_PATH >> ${RESULT_LOG} + echo -e "============================" >> ${RESULT_LOG} + echo -e " MAC: ${MAC_ADDR}" >> ${RESULT_LOG} + echo -e "============================" >> ${RESULT_LOG} + echo -e "" >> ${RESULT_LOG} + echo -e "" >> ${RESULT_LOG} + sync +} + +function error_check() +{ + if [ "$1" != "0" ]; then + echo -e "[${C_LRED}ERR${C_NC}]: $2" >> $SUMMARY_PATH + else + echo -e "[${C_LGREEN} OK${C_NC}]: $2" >> $SUMMARY_PATH + fi +} + + +function test_mac() +{ + echo "" + echo -e "${C_LCYAN}### [${FUNCNAME}] ###${C_NC}" + echo "" + + COMPLETE_TEST_NAME=${FUNCNAME} + + + for i in 0xfa 0xfb 0xfc 0xfd 0xfe 0xff + do + if [ "$i" == "0xfa" ]; then + EEPROM_MAC=$(i2cget -f -y 1 0x50 $i b | sed 's/0x//') + else + EEPROM_MAC+=$(i2cget -f -y 1 0x50 $i b | sed 's/0x/:/') + fi + done + + MAC_ADDR="${EEPROM_MAC^^}" + + ETH_MAC=$(ifconfig | grep eth0 | awk {'print $5'}) + + if [ "${EEPROM_MAC^^}" = "${ETH_MAC^^}" ]; then + return $? + else + return -1 + fi +} + +function check_ping() +{ + for i in 1 2 3 4 + do + sleep 1 + ping -c 1 -w 1 $PING_ADDR > /dev/null + if [ "$?" = "0" ]; then + return $? + fi + done + + return -1 +} + +function check_ethernet() +{ + echo "Check Ethernet Link Up/Down" + if [ $(cat /sys/class/net/$1/operstate) = "up" ]; then + return 0 + else + ifconfig eth0 up + return -1 + fi +} + +function test_ethernet() +{ + echo "" + echo -e "${C_LCYAN}### [${FUNCNAME}] ###${C_NC}" + echo "" + + COMPLETE_TEST_NAME=${FUNCNAME} + + # TODO Test + + IFACE="$1" + + for i in {1..10} + do + check_ethernet $IFACE + if [ "$?" = "0" ]; then + break + else + echo "$IFACE Link is down" + fi + sleep 1 + done + + udhcpc -i eth0 -n -q + if [ "$?" != 0 ]; then + return -1 + fi + + check_ping + if [ "$?" != 0 ]; then + return -1 + fi + + return $? +} + +function test_rtc() +{ + echo "" + echo -e "${C_LCYAN}### [${FUNCNAME}] ###${C_NC}" + echo "" + + COMPLETE_TEST_NAME=${FUNCNAME} + + # TODO Test + + ls /dev/rtc0 + if [ "$?" != 0 ]; then + return -1 + fi + + return $? +} + +TOUCH_IC_NAME="TSC2007" +function test_touch() +{ + echo "" + echo -e "${C_LCYAN}### [${FUNCNAME}] ###${C_NC}" + echo "" + + COMPLETE_TEST_NAME=${FUNCNAME} + + # TODO Test + + cat /proc/bus/input/devices | grep $TOUCH_IC_NAME + if [ "$?" != "0" ]; then + return -1 + fi + + hexdump /dev/input/event0 & + if [ "$?" != "0" ]; then + return -1 + fi + + echo -e "" + echo -e "${C_BLINK}${C_BOLD}Press any key to ${FUNCNAME} exit...${C_NC}" + echo -e "" + read -rs + + killall hexdump + + return 0 +} + +BACK_LIGHT="/sys/class/backlight/backlight_lvds.19/brightness" +function test_lcd() +{ + echo "" + echo -e "${C_LCYAN}### [${FUNCNAME}] ###${C_NC}" + echo "" + + COMPLETE_TEST_NAME=${FUNCNAME} + + # TODO Test + + fb-test + if [ "$?" != 0 ]; then + return -1 + fi + + sleep 1 + echo 0 > $BACK_LIGHT + + sleep 1 + echo 10 > $BACK_LIGHT + + sleep 1 + echo 0 > $BACK_LIGHT + + sleep 1 + echo 10 > $BACK_LIGHT + + sleep 1 + echo 0 > $BACK_LIGHT + + sleep 1 + echo 5 > $BACK_LIGHT + + return $? +} + +function test_encoder() +{ + echo "" + echo -e "${C_LCYAN}### [${FUNCNAME}] ###${C_NC}" + echo "" + + COMPLETE_TEST_NAME=${FUNCNAME} + + # TODO Test + + ${THREAD_FUNC_SCRIPT} evtest & + if [ "$?" != 0 ]; then + return -1 + fi + + echo -e "" + echo -e "${C_BLINK}${C_BOLD}Press any key to ${FUNCNAME} exit...${C_NC}" + echo -e "" + read -rs + + killall evtest + + return $? +} + +WAV_FILE="${JIG_PATH}opening.wav" +function test_audio() +{ + echo "" + echo -e "${C_LCYAN}### [${FUNCNAME}] ###${C_NC}" + echo "" + + COMPLETE_TEST_NAME=${FUNCNAME} + + # TODO Test + + aplay $WAV_FILE + if [ "$?" != "0" ]; then + return -1 + fi + + return $? +} + +function test_usb_storage() +{ + echo "" + echo -e "${C_LCYAN}### [${FUNCNAME}] ###${C_NC}" + echo "" + + COMPLETE_TEST_NAME=${FUNCNAME} + + # TODO Test + + ls /dev/sda + if [ "$?" != "0" ]; then + return -1 + fi + + ls /dev/sdb + return $? +} + +function test_fram() +{ + echo "" + echo -e "${C_LCYAN}### [${FUNCNAME}] ###${C_NC}" + echo "" + + COMPLETE_TEST_NAME=${FUNCNAME} + + # TODO Test + + ${FRAM_TEST_APP} + if [ "$?" != "0" ]; then + return -1 + fi + + return $? +} + +function test_tty() +{ + echo "" + echo -e "${C_LCYAN}### [${FUNCNAME}] ###${C_NC}" + echo "" + + COMPLETE_TEST_NAME=${FUNCNAME} + WRITE_MSG="FALINUX_TTY" + + # TODO Test + + DEV_TTY_PATH="/dev/ttymxc1" + + ${THREAD_FUNC_SCRIPT} tty ${DEV_TTY_PATH} ${WRITE_MSG} & + read -s -t 5 READ_MSG < ${DEV_TTY_PATH} + if [ "$?" != 0 ]; then + return -1 + fi + echo "Read: [${READ_MSG}]" + + if [ "${WRITE_MSG}" != "${READ_MSG}" ]; then + return -1 + fi + + return $? +} + +function test_rs485() +{ + echo "" + echo -e "${C_LCYAN}### [${FUNCNAME}] ###${C_NC}" + echo "" + + COMPLETE_TEST_NAME=${FUNCNAME} + + # TODO Test + + DEV_RS485_PATH1="/dev/ttymxc2" + DEV_RS485_PATH2="/dev/ttymxc3" + + # Read : RS485_1, Write : RS485_2 + RS485_WRITE_MSG="FALINUX_TEST:"${DEV_RS485_PATH2} + ${THREAD_FUNC_SCRIPT} rs485 ${DEV_RS485_PATH2} ${RS485_WRITE_MSG} & + read -s -t 5 RS485_READ_MSG < ${DEV_RS485_PATH1} + if [ "$?" != 0 ]; then + return -1 + fi + echo "Read: [${RS485_READ_MSG}]" + + if [ "${RS485_WRITE_MSG}" != "${RS485_READ_MSG}" ]; then + return -1 + fi + + # Read : RS485_2, Write : RS485_1 + RS485_WRITE_MSG="FALINUX_TEST:"${DEV_RS485_PATH1} + ${THREAD_FUNC_SCRIPT} rs485 ${DEV_RS485_PATH1} ${RS485_WRITE_MSG} & + read -s -t 5 RS485_READ_MSG < ${DEV_RS485_PATH2} + if [ "$?" != 0 ]; then + return -1 + fi + echo "Read: [${RS485_READ_MSG}]" + + if [ "${RS485_WRITE_MSG}" != "${RS485_READ_MSG}" ]; then + return -1 + fi + + return $? +} + + +function test_default() +{ + echo "" + echo -e "${C_LCYAN}### [${FUNCNAME}] ###${C_NC}" + echo "" + + COMPLETE_TEST_NAME=${FUNCNAME} + + # TODO Test + + + return $? +} + +function main() +{ + echo "" + echo -e " ### Start DEV Test - [${FUNCNAME}] ###" + echo "" + + Init + + test_mac + error_check $? ${COMPLETE_TEST_NAME} + + test_ethernet ${ETH_NAME} + error_check $? ${COMPLETE_TEST_NAME} + + test_rtc + error_check $? ${COMPLETE_TEST_NAME} + + test_touch + error_check $? ${COMPLETE_TEST_NAME} + + test_lcd + error_check $? ${COMPLETE_TEST_NAME} + + test_encoder + error_check $? ${COMPLETE_TEST_NAME} + + test_audio + error_check $? ${COMPLETE_TEST_NAME} + + test_usb_storage + error_check $? ${COMPLETE_TEST_NAME} + + test_fram + error_check $? ${COMPLETE_TEST_NAME} + + test_tty + error_check $? ${COMPLETE_TEST_NAME} + + test_rs485 + error_check $? ${COMPLETE_TEST_NAME} + + summary + save_result +} + +function test_func() +{ + echo "" + echo -e " ### TEST Func - [${FUNCNAME}] ###" + echo "" + + test_encoder + error_check $? ${COMPLETE_TEST_NAME} +} + + +main diff --git a/scripts/thread_func.sh b/scripts/thread_func.sh new file mode 100755 index 0000000..7625fcd --- /dev/null +++ b/scripts/thread_func.sh @@ -0,0 +1,97 @@ +#!/bin/bash + +C_LRED='\033[1;31m' +C_LGREEN='\033[1;32m' +C_LCYAN='\033[1;36m' +C_NC='\033[0m' +C_BLINK='\033[5m' +C_BOLD='\033[1m' + +SUMMARY_PATH="/tmp/list" +THREAD_FUNC_NAME="" + +function error_check() +{ + if [ "$1" != "0" ]; then + echo -e "[${C_LRED}ERR${C_NC}]: $2" >> $SUMMARY_PATH + fi +} + + +function thread_evtest() +{ + echo "" + echo " @@@ [${FUNCNAME}] @@@" + echo "" + + THREAD_FUNC_NAME=${FUNCNAME} + + evtest << EOF + 1 +EOF + + return $? +} + +function thread_tty() +{ + echo "" + echo " @@@ [${FUNCNAME}] @@@" + echo "" + + DEV_TTY_PATH="$2" + SEND_MESSAGE="$3" + + THREAD_FUNC_NAME=${FUNCNAME} + + sleep 1 + echo $2 $3 + echo "Send: [${SEND_MESSAGE}]" + echo "${SEND_MESSAGE}" > ${DEV_TTY_PATH} + + return $? +} + +function thread_rs485() +{ + echo "" + echo " @@@ [${FUNCNAME}] @@@" + echo "" + + DEV_RS485_PATH=$2 + SEND_MESSAGE=$3 + + THREAD_FUNC_NAME=${FUNCNAME} + + echo $SEND_MESSAGE $DEV_RS485_PATH + echo ${SEND_MESSAGE} ${DEV_RS485_PATH} + + sleep 1 + echo "Send: [${SEND_MESSAGE}]" + echo "${SEND_MESSAGE}" > ${DEV_RS485_PATH} + + return $? +} + + +function main() +{ + case $1 in + evtest) + thread_evtest + error_check $? ${COMPLETE_TEST_NAME} + ;; + tty) + echo $2 $3 + thread_tty $@ + error_check $? ${COMPLETE_TEST_NAME} + ;; + rs485) + thread_rs485 $@ + error_check $? ${COMPLETE_TEST_NAME} + ;; + esac +} + + +main $@