Step.1 Install Samba package
-
$ sudo apt-get install samba
$ sudo apt-get install samba-common-bin
Step.2 add samba user
-
$ sudo smbpasswd -a pi
Step.3 restart samba service
-
# sudo /etc/init.d/samba restart
Step.1 Install Samba package
Step.2 add samba user
Step.3 restart samba service
因工作需要,做了個簡單的 makefile
# # SDCC Makefile # # Memory Layout # Program Size: 4KB # Internal Mem: 256B # External Mem: 4KB # ------------------------------------------------------ # PATH INCDIR = ../inc SRCDIR = ./src OBJDIR = ./obj LIBDIR = # ------------------------------------------------------ # UTILITY UTILDIR = ../../util HEX2BIN = $(UTILDIR)/hex2bin/bin/hex2bin # ------------------------------------------------------ # Target and Source TARGET = prom OBJ = $(OBJDIR)/printf.c.rel $(OBJDIR)/debug.c.rel $(OBJDIR)/gpio.c.rel $(OBJDIR)/spi.c.rel $(OBJDIR)/s25fl040a.c.rel $(OBJDIR)/main.c.rel $(OBJDIR)/crtstart.asm.rel # ------------------------------------------------------ # SDCC CC = sdcc AS = sdas8051 # ------------------------------------------------------ # Memory Layout # PRG Size = 4K Bytes CODE_SIZE = --code-loc 0x0000 --code-size 4096 # INT-MEM Size = 256 Bytes IRAM_SIZE = --idata-loc 0x0000 --iram-size 256 # EXT-MEM Size = 4K Bytes XRAM_SIZE = --xram-loc 0x0000 --xram-size 4096 # ------------------------------------------------------ # MCS51 Options # Memory Model (small, medium, large, huge) MODEL = medium #LIBS = #LIBPATH = -L $(LIBDIR) #DEBUG = --debug AFLAGS = -l -s CFLAGS = -I./inc -I$(INCDIR) -mmcs51 --model-$(MODEL) --out-fmt-ihx --no-xinit-opt $(DEBUG) LFLAGS = $(LIBPATH) $(LIBS) -mmcs51 --model-$(MODEL) $(CODE_SIZE) $(IRAM_SIZE) $(XRAM_SIZE) --out-fmt-ihx $(DEBUG) # ------------------------------------------------------ # S = @ .PHONY: all util clean .SECONDARY: all: util $(OBJDIR)/$(TARGET).memh util: (cd $(UTILDIR)/hex2bin; make) %.memh: %.bin $(S) hexdump -v -e '"@%04.4_ax " 16/1 "%02x " "n"' $^ > $@ %.bin: %.hex $(S) $(HEX2BIN) -s 0 -l 1000 -p ff $^ %.hex: %.ihx $(S) packihx $^ > $@ %.ihx: $(OBJ) $(S) $(CC) -o $@ $(LFLAGS) $^ $(OBJDIR)/%.c.rel: $(SRCDIR)/%.c $(S) $(CC) -o $@ $(CFLAGS) -c $^ $(OBJDIR)/%.asm.rel: $(SRCDIR)/%.asm $(S) $(AS) $(AFLAGS) -o $@ $^ clean: $(S) rm -rf $(OBJDIR)/* (cd $(UTILDIR)/hex2bin; make clean)
直接執行不加參數即可得到使用方法:
$./hex2bin
hex2bin v1.0.10, Copyright (C) 2012 Jacques Pelletier & contributors
usage: hex2bin [OPTIONS] filename
Options:
-s [address] Starting address in hex (default: 0)
-l [length] Maximal Length (Starting address + Length -1 is Max Address)
File will be filled with Pattern until Max Address is reached
Length must be a power of 2 in hexadecimal:
Hex Decimal
1000 = 4096 (4ki)
2000 = 8192 (8ki)
4000 = 16384 (16ki)
8000 = 32768 (32ki)
10000 = 65536 (64ki)
20000 = 131072 (128ki)
40000 = 262144 (256ki)
80000 = 524288 (512ki)
100000 = 1048576 (1Mi)
200000 = 2097152 (2Mi)
400000 = 4194304 (4Mi)
800000 = 8388608 (8Mi)
-e [ext] Output filename extension (without the dot)
-c Enable hex file checksum verification
-p [value] Pad-byte value in hex (default: ff)
-k [0|1|2] Select checksum type
0 = 8-bit,
1 = 16-bit little endian,
2 = 16-bit big endian
-r [start] [end] Range to compute checksum over (default is min and max addresses)
-f [address] [value] Address and value of checksum to force
舉來說,我用 sdcc 編譯所得到的檔案為 hello.ihx (Intel-HEX format),
為了得到 hello.bin 所用命令如下:
$ hex2bin -s 0000 -l 1000 -p ff hello.ihx hex2bin v1.0.10, Copyright (C) 2012 Jacques Pelletier & contributors Lowest address = 00000000 Highest address = 00000FFF Pad Byte = FF 8-bit Checksum = 1E $
“-s 0000 -l 1000 -p ff” 說明了:
起始位置: 0x0000,長度:0x1000,HEX File 中未定義的的值一律填入 0xff
並自動計算出 8-bit checksum = 0x1E (只是將 bin file 中所有的值加總)
有另外一種用法,
如果你想指定 8-bit checksum 的值(例如0x55),
例如 boot loader 從 Serial Flash 將 hello.bin 讀出來後,
要先做簡單的 checksum 檢查無誤之後,才進行下一個動作,
命令如下;
$ hex2bin -s 0000 -l 1000 -p ff -k 0 -f 0fff 55 hello.ihx hex2bin v1.0.10, Copyright (C) 2012 Jacques Pelletier & contributors Lowest address = 00000000 Highest address = 00000FFF Pad Byte = FF 8-bit Checksum = 25 Addr 00000FFF set to 2F $
這命令會在 位置 0x0fff 填入 0x2f
使得 8-bit checksim 從原先的 0x25 變成指定的 0x55
使用 Linux 內建的指令 hexdump 就可以將 *.bin 轉換成 *.mem
讓 verilog 的 $readmemh 直接讀取
範例:8051 的 program : test.bin 轉換成 test.mem
$ hexdump -e '"@%07.7_ax " 8/1 "%02x " "n"' test.bin > test.mem
因工作上需要 hex2bin 的工具 又懶得自己寫
在網路上發現一個寫的還不錯的 hex2bin source code : hex2bin-1.0.9
其中包含了兩個程式 hex2bin and mot2bin
但使用時出現了錯誤的情形,
原來是 compile 時必須是 32-bit 架構,而我卻是在 64-bit Linux 下編譯的,
為了解決這問題,
首先安裝 32-bit gcc compiler
$ sudo zypper in libstdc++47-devel-32bit $ sudo zypper in gcc47-32bit
接下來修改 hex2bin 的 Makefile,在 gcc 後面加上 -m32 參數
重新編譯後即可正常使用!
最近常遇到 “License: Error, 0x3f2” 的問題,可是不知道什麼意思?
後來找到一些資料,留著參考先:
error info: 1 No “VENDOR_STRING=ES=XXXXXXXXXXXXXXXXXXXX" License: Error, 0x3e9, Contact customer support. Program will now exit. 2 ES length < 0×14 and ES length != 0x0F License: Error, 0x3ea, Contact customer support. Program will now exit. 3 “VENDOR_STRING=MAC=XXXXXXXXXXXXXXX" length error License: Error, 0x3eb, Contact customer support. Program will now exit. 4 “VENDOR_STRING=ES=XXXXXXXXXXXXXXXXXXXX" ES mismatch License: Error, 0x3ec, Contact customer support. Program will now exit. 5 count=uncounted or count=0 License: Error, 0x3ed, Contact customer support. Program will now exit. 6 No SERVER line (License server = null string) License: Error, 0x3ee, Contact customer support. Program will now exit. 7 FEATURE HOSTID type error License: Error, 0x3ef, Contact customer support. Program will now exit. 8 lc_isadmin error License: Error, 0x3f0, Contact customer support. Program will now exit. 9 SERVER HOSTID type error License: Error, 0x3f1, Contact customer support. Program will now exit. 0A FEATURE desktop_main exists, but its version > 5.300000000000000 License: Error, 0x3f2, Contact customer support. Program will now exit. 0B FEATURE desktop_main doesn’t exist, and some fields in the feature line are wrong License: Error, 0x3f3, Contact customer support. Program will now exit. 0C expiration date = permanent or (expiration date – today) > 0x2dc License: Error, 0x3f4, Contact customer support. Program will now exit. 0D, 0E, 0F expiration date format error License: Error, 0x3f5, 0x3f6, 0x3f7 Contact customer support. Program will now exit.
寫了一個 Makefile,可以半自動的編譯 GNU Cross Compiler
做個記錄,怕以後忘記
#TARGET = arm-elf
#TARGET = mips-elf
TARGET = sparc-elf
PKG_DIR = $(CURDIR)/PKG
SRC_DIR = $(CURDIR)/SRC
BUILD_DIR = $(CURDIR)/BUILD-$(TARGET)
TARGET_DIR = /srv/xfile/compiler/$(TARGET)-4.7.0
BINUTILS_VER = binutils-2.22
GCC_VER = gcc-4.7.0
MPC_VER = mpc-0.9
MPFR_VER = mpfr-3.1.0
GMP_VER = gmp-5.0.4
NEWLIB_VER = newlib-1.20.0
GDB_VER = gdb-7.3.1
INSIGHT_VER = insight-6.8-1
GCC_PACKAGE = $(PKG_DIR)/gcc/$(GCC_VER).tar.bz2
GCC_SRC_DIR = $(SRC_DIR)/$(GCC_VER)
GCC_BUILD_DIR = $(BUILD_DIR)/$(GCC_VER)
GMP_PACKAGE = $(PKG_DIR)/gmp/$(GMP_VER).tar.bz2
GMP_SRC_DIR = $(SRC_DIR)/$(GMP_VER)
GMP_BUILD_DIR = $(BUILD_DIR)/$(GMP_VER)
MPFR_PACKAGE = $(PKG_DIR)/mpfr/$(MPFR_VER).tar.bz2
MPFR_SRC_DIR = $(SRC_DIR)/$(MPFR_VER)
MPFR_BUILD_DIR = $(BUILD_DIR)/$(MPFR_VER)
MPC_PACKAGE = $(PKG_DIR)/mpc/$(MPC_VER).tar.gz
MPC_SRC_DIR = $(SRC_DIR)/$(MPC_VER)
MPC_BUILD_DIR = $(BUILD_DIR)/$(MPC_VER)
BINUTILS_PACKAGE = $(PKG_DIR)/binutils/$(BINUTILS_VER).tar.bz2
BINUTILS_SRC_DIR = $(SRC_DIR)/$(BINUTILS_VER)
BINUTILS_BUILD_DIR = $(BUILD_DIR)/$(BINUTILS_VER)
GDB_PACKAGE = $(PKG_DIR)/gdb/$(GDB_VER).tar.gz
GDB_SRC_DIR = $(SRC_DIR)/$(GDB_VER)
GDB_BUILD_DIR = $(BUILD_DIR)/$(GDB_VER)
NEWLIB_PACKAGE = $(PKG_DIR)/newlib/$(NEWLIB_VER).tar.gz
NEWLIB_SRC_DIR = $(SRC_DIR)/$(NEWLIB_VER)
NEWLIB_BUILD_DIR = $(BUILD_DIR)/$(NEWLIB_VER)
INSIGHT_PACKAGE = $(PKG_DIR)/insight/$(INSIGHT_VER).tar.bz2
INSIGHT_SRC_DIR = $(SRC_DIR)/$(INSIGHT_VER)
INSIGHT_BUILD_DIR = $(BUILD_DIR)/$(INSIGHT_VER)
CONFIG_FLAGS = --target=$(TARGET)
--prefix=$(TARGET_DIR)
note:
@echo ----------------------------------------
@echo make binutils # Build binutils
@echo make gcc-p0 # Build GMP, MPFR, MPC
@echo make gcc-p1 # Build GCC Pass-1
@echo make newlib # Build newlib
@echo make gcc-p2 # Build GCC Pass-2
@echo make insight # Build insight
@echo ----------------------------------------
all: binutils gcc-p0 gcc-p1 newlib gcc-p2 insight
dir : src_dir
# Source Decompress
src_dir: $(BINUTILS_SRC_DIR) $(NEWLIB_SRC_DIR) $(GCC_SRC_DIR) $(GDB_SRC_DIR) $(INSIGHT_SRC_DIR) $(GMP_SRC_DIR) $(MPFR_SRC_DIR) $(MPC_SRC_DIR)
build_dir: $(BINUTILS_BUILD_DIR) $(NEWLIB_BUILD_DIR) $(GCC_BUILD_DIR) $(GDB_BUILD_DIR)
# ------------- BINUTIL ----------------
BINUTILS_CONF = $(CONFIG_FLAGS) --disable-nls
binutils: $(BINUTILS_BUILD_DIR)
@echo "****** Build $(BINUTILS_VER) ***********"
(cd $(BINUTILS_BUILD_DIR); $(BINUTILS_SRC_DIR)/configure $(BINUTILS_CONF);)
(cd $(BINUTILS_BUILD_DIR); make all install)
$(BINUTILS_SRC_DIR): $(SRC_DIR)
@echo "****** Decompress $(BINUTILS_PACKAGE) ***********"
-@mkdir $(BINUTILS_SRC_DIR)
(cd $(SRC_DIR); tar -jxvf $(BINUTILS_PACKAGE))
$(BINUTILS_BUILD_DIR): $(BUILD_DIR)
@echo "****** create directory $(BINUTILS_BUILD_DIR) ***********"
-@mkdir $(BINUTILS_BUILD_DIR)
# ------------- NEWLIB ----------------
NEWLIB_CONF = $(CONFIG_FLAGS) --disable-nls
newlib: $(NEWLIB_BUILD_DIR)
@echo "****** Build $(NEWLIB_VER) ***********"
(set path = $(TARGET_DIR)/bin;cd $(NEWLIB_BUILD_DIR);$(NEWLIB_SRC_DIR)/configure $(NEWLIB_CONF);)
(cd $(NEWLIB_BUILD_DIR); make all install)
$(NEWLIB_SRC_DIR): $(SRC_DIR)
@echo "****** Decompress $(NEWLIB_PACKAGE) ***********"
(cd $(SRC_DIR); tar -zxvf $(NEWLIB_PACKAGE))
$(NEWLIB_BUILD_DIR): $(BUILD_DIR)
@echo "****** create directory $(NEWLIB_BUILD_DIR) ***********"
-@mkdir $(NEWLIB_BUILD_DIR)
# ------------- GDB ----------------
GDB_CONF = $(CONFIG_FLAGS) --disable-nls
gdb: $(GDB_BUILD_DIR)
@echo "****** Build $(GDB_VER) ***********"
(cd $(GDB_BUILD_DIR); $(GDB_SRC_DIR)/configure $(GDB_CONF);)
(cd $(GDB_BUILD_DIR); make all install))
$(GDB_SRC_DIR): $(SRC_DIR)
@echo "****** Decompress $(GDB_PACKAGE) ***********"
(cd $(SRC_DIR); tar -zxvf $(GDB_PACKAGE))
$(GDB_BUILD_DIR): $(BUILD_DIR)
@echo "****** create directory $(GDB_BUILD_DIR) ***********"
-@mkdir $(GDB_BUILD_DIR)
# ------------- INSIGHT ----------------
INSIGHT_CONF = $(CONFIG_FLAGS) --disable-nls --disable-werror
insight: $(INSIGHT_BUILD_DIR)
@echo "****** Build $(INSIGHT_VER) ***********"
(cd $(INSIGHT_BUILD_DIR); $(INSIGHT_SRC_DIR)/configure $(INSIGHT_CONF);)
(cd $(INSIGHT_BUILD_DIR); make all install)
$(INSIGHT_SRC_DIR): $(SRC_DIR)
@echo "****** Decompress $(INSIGHT_PACKAGE) ***********"
(cd $(SRC_DIR); tar -jxvf $(INSIGHT_PACKAGE))
$(INSIGHT_BUILD_DIR): $(BUILD_DIR)
@echo "****** create directory $(INSIGHT_BUILD_DIR) ***********"
-@mkdir $(INSIGHT_BUILD_DIR)
# ------------- gcc-p0 ----------------
gcc-p0: gmp mpfr mpc
# ------------- GMP ----------------
GMP_CONF = --prefix=$(TARGET_DIR)
gmp: $(GMP_BUILD_DIR)
@echo "****** Build $(GMP_VER) ***********"
(cd $(GMP_BUILD_DIR); $(GMP_SRC_DIR)/configure $(GMP_CONF);)
(cd $(GMP_BUILD_DIR); make all install)
$(GMP_SRC_DIR): $(SRC_DIR)
@echo "****** Decompress $(INSIGHT_PACKAGE) ***********"
(cd $(SRC_DIR); tar -jxvf $(GMP_PACKAGE))
$(GMP_BUILD_DIR): $(BUILD_DIR)
@echo "****** create directory $(GMP_BUILD_DIR) ***********"
-@mkdir $(GMP_BUILD_DIR)
# ------------- MPFR ----------------
MPFR_CONF = --prefix=$(TARGET_DIR)
--with-gmp=$(TARGET_DIR)
mpfr: $(MPFR_BUILD_DIR)
@echo "****** Build $(MPFR_VER) ***********"
(cd $(MPFR_BUILD_DIR); $(MPFR_SRC_DIR)/configure $(MPFR_CONF);)
(cd $(MPFR_BUILD_DIR); make all install)
$(MPFR_SRC_DIR): $(SRC_DIR)
@echo "****** Decompress $(MPFR_PACKAGE) ***********"
(cd $(SRC_DIR); tar -jxvf $(MPFR_PACKAGE))
$(MPFR_BUILD_DIR): $(BUILD_DIR)
@echo "****** create directory $(MPFR_BUILD_DIR) ***********"
-@mkdir $(MPFR_BUILD_DIR)
# ------------- MPC ----------------
MPC_CONF = --prefix=$(TARGET_DIR)
--with-gmp=$(TARGET_DIR)
--with-mpfr=$(TARGET_DIR)
mpc: $(MPC_BUILD_DIR)
@echo "****** Build $(MPC_VER) ***********"
(cd $(MPC_BUILD_DIR); $(MPC_SRC_DIR)/configure $(MPC_CONF);)
(cd $(MPC_BUILD_DIR); make all install)
$(MPC_SRC_DIR): $(SRC_DIR)
@echo "****** Decompress $(MPC_PACKAGE) ***********"
(cd $(SRC_DIR); tar -zxvf $(MPC_PACKAGE))
$(MPC_BUILD_DIR): $(BUILD_DIR)
@echo "****** create directory $(MPC_BUILD_DIR) ***********"
-@mkdir $(MPC_BUILD_DIR)
# ------------- GCC ----------------
GCC_CONF = $(CONFIG_FLAGS)
--enable-interwork
--disable-multilib
--disable-nls
--disable-shared
--disable-threads
--disable-decimal-float
--disable-libmudflap
--disable-libssp
--disable-libgomp
--disable-libquadmath
--without-ppl
--without-cloog
--enable-languages=c,c++
--with-newlib
--with-headers=$(NEWLIB_SRC_DIR)/newlib/libc/include
--with-gmp=$(TARGET_DIR)
--with-mpfr=$(TARGET_DIR)
--with-mpc=$(TARGET_DIR)
--enable-obsolete
# --with-mpfr-include=$(GCC_SRC_DIR)/mpfr/src
# --with-mpfr-lib=$(GCC_SRC_DIR)/mpfr/src/.lib
gcc-p1: $(GCC_BUILD_DIR)
@echo "****** Build $(GCC_VER) Phase-1 ***********"
(cd $(GCC_BUILD_DIR); $(GCC_SRC_DIR)/configure $(GCC_CONF);)
(cd $(GCC_BUILD_DIR); make all-gcc install-gcc)
gcc-p2:
@echo "****** Build $(GCC_VER) Phase-2 ***********"
(cd $(GCC_BUILD_DIR); make all install)
$(GCC_SRC_DIR): $(SRC_DIR)
@echo "****** Decompress $(GCC_PACKAGE) ***********"
(cd $(SRC_DIR); tar -jxvf $(GCC_PACKAGE))
$(GCC_BUILD_DIR): $(BUILD_DIR)
@echo "****** create directory $(GCC_BUILD_DIR) ***********"
-@mkdir $(GCC_BUILD_DIR)
# ------------- misc ----------------
$(SRC_DIR):
@echo "****** create directory $(SRC_DIR) ***********"
-@mkdir $(SRC_DIR)
$(BUILD_DIR):
@echo "****** create directory $(BUILD_DIR) ***********"
-@mkdir $(BUILD_DIR)
$(PKG_DIR):
@echo ERROR! No $(GNU_DIR) found!
exit
clean: clean-build clean-src
clean-src:
@rm -rf $(SRC_DIR)
clean-build:
@rm -rf BUILD-*
使用 insight-6.8-1
% ../insight-6.8-1/configure --target=sparc-elf --prefix=$OPT/sparc-elf-4.7.0 --disable-nls --disable-werror
會出現以下 error messages:
... /GNU/SRC/insight-6.8-1/sim/erc32/float.c:173:2: warning: #warning no fpu trap support for this target [-Wcpp] gcc -DHAVE_CONFIG_H -DPROFILE=1 -DWITH_PROFILE=-1 -DDEFAULT_INLINE=0 -DSTAT -DFAST_UART -DIUREV0 -DMECREV0 -I. -I/GNU/SRC/insight-6.8-1/sim/erc32 -I../common -I/GNU/SRC/insight-6.8-1/sim/erc32/../common -I../../include -I/GNU/SRC/insight-6.8-1/sim/erc32/../../include -I../../bfd -I/GNU/SRC/insight-6.8-1/sim/erc32/../../bfd -I../../opcodes -I/GNU/SRC/insight-6.8-1/sim/erc32/../../opcodes -g -O2 -o sis sis.o exec.o erc32.o func.o help.o float.o ../../bfd/libbfd.a ../../opcodes/libopcodes.a ../../libiberty/libiberty.a -lnsl ../../readline/libreadline.a -lm ../../readline/libreadline.a(display.o): In function `cr': /GNU/SRC/insight-6.8-1/readline/display.c:2205: undefined reference to `tputs' ../../readline/libreadline.a(display.o): In function `_rl_move_cursor_relative': /GNU/SRC/insight-6.8-1/readline/display.c:1719: undefined reference to `tputs' /GNU/SRC/insight-6.8-1/readline/display.c:1745: undefined reference to `tputs' ../../readline/libreadline.a(display.o): In function `_rl_move_vert': /GNU/SRC/insight-6.8-1/readline/display.c:1783: undefined reference to `tputs' ...
查了很久之後,發現是 link erc32 時少了 ncurses 這個 library,也就是少了 -lncurses。
解法:patch insight-6.8-1 source code:
edit ./insight-6.8-1/sim/erc32/Makefile.in
Line.25: SIM_EXTRA_LIBS = $(READLINE_LIB) $(TERMCAP_LIB) -lm -lncurses
重新編譯安裝就OK了!
% ../insight-6.8-1/configure --target=sparc-elf --prefix=$OPT/sparc-elf-4.7.0 --disable-nls --disable-werror % make % make install