2015年1月22日 星期四

[Linux] Porting openssl to MIPS platform

嵌入式移植無師... 要很多經驗就是。

通常僅需要把 x86 gcc compiler 換成 cross-compiler就完成了。

另外再處理 CFLAGS LDFLAGS makefile 可能還要調一下 configuration 的參數...
在倒楣的話還要在小改一下code

好像越說越多,總之

Porting 就像生小孩,你不會知道他背後"幹"了多少次。 (各種意味)




這次幫別人debug openssl porting 一看到 crti.o 檔案找不到,就該警覺toolchain 有問題了,根本是內部路徑不完備,浪費一堆時間。

怎麼可能會有人給出有問題的toolchian 阿?!
乾... 真的發生了。

重新由 buildroot 開始...(包 toolchain -- > port openssl)
以下筆記

這篇就寫給... 小鋅大人囉。

完備:
1. toolchain cross compiler:
#wget http://buildroot.uclibc.org/downloads/buildroot-2014.11.tar.gz

2. Good openssl package:
#wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1g.tar.gz

For toolchain: (target: mips, version 1)
>go into buildroot folder

#make menuconfig
choose:
Target Architecture (MIPS (big endian))  --->
Target Architecture Variant (mips 32)  --->
Toolchain type (Buildroot toolchain)  ---> [*] Enable large file (files > 2 GB) support

#make
DONE

Setup cross-compiler:
Edit file as:
# cat set_PATH_build_root
-----
#! /bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# chang the path to "YOUR" buildroot-gcc342
TOOLCHAINDIR=/YOUR/PATH/buildroot-2014.11/output/host/usr
export PATH=${TOOLCHAINDIR}/bin:${PATH}
----

Source it
#source set_PATH_build_root

For openssl:
> go into openssl folder
#./config --prefix=/YOUR/OPENSSL/FOLDER/build --cross-compile-prefix=mips-linux- --openssldir=/YOUR/OPENSSL/FOLDER/ shared no-asm
#make
DONE

Check
#file libssl.so.1.0.0
libssl.so.1.0.0: ELF 32-bit MSB  shared object, MIPS, MIPS32 version 1 (SYSV), dynamically linked, not stripped

2014年12月30日 星期二

[Linux] 簡單安裝 Install tftp server in Linux simply

很久很久以前的 hpa-tftpd 的安裝方法....

實在有點難用又過時了。
2009 年 ~ ---> Ubuntu 都不知道換了幾次臉。

為了讓google 自己方便,下面記載新的方法。


2014年12月15日 星期一

[Linux] lunbuntu + unetbootin + live USB


這超迷你版的USB,哈~ 超無痕的。可惜速度是假USB3.0


unetbootin 用來製作 live USB 這件事情就不用說了,Easy and more in google.


稍微解說一下原理:
載用syslinux 的booting loader 來帶起作業系統,因為是live 每次開機都會洗掉,根據這點很輕易的就可以在
"/xxx/xxx" 發現採用squashfs 一個read-only 壓縮檔案系統,這邊看起來都跟平常工作的嵌入式系統類似,特別的是
unetbootin 是有提供使用者讀寫修改,下次重開機可以記錄保留的效果

何等神奇!!! 馬上下一個 mount & losetup -a 檢查一下

root@lubuntu:~# mount /cow on / type overlayfs (rw) 
/dev/sdb1 on /cdrom type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro) 
/dev/loop0 on /rofs type squashfs (ro,noatime) 
/dev/loop1 on /media/bejo/c698766a-48e2-6d45-81ae-fe5fba3ff6f2 type ext2 (rw,nosuid,nodev,uhelper=udisks2)
root@lubuntu:~# losetup -a 
/dev/loop0: [0811]:35 (/cdrom/casper/filesystem.squashfs) 
/dev/loop1: [0811]:41 (/cdrom/casper-rw) 

loop1 就是那神奇的 casper-w

如果你做一個 mount 動作
mount -o loop casper-rw /mnt/xxx
就會發現長得非常類似(根本一樣 = =) 一個基本的file system 又剛剛好是你改過的檔案

哪有這麼剛好,原來 ...
是 overlap ... mount

原理就是先掛一個static 的image 再把自己可以修改的蓋上去,噹噹  完成檔案系統可以紀錄被修改的樣子
效果就會 ---> 先讀取可讀寫的 如果沒有 ---> 讀取靜態的 ---> 結束這回合

孔明先生,這太妙了。

說一下重點:
1. 從此只要備份好 casper-w 這個檔案,凡是live usb 都可以被還原 (自己還原自己作)
2. 可以加大 casper-w 大小
方法:
(找一台Linux  不是同一台!!!)
#dd if=/dev/zero bs=1M count=1024 >> casper-rw   // 1024MB ---> 自行更改 別超過4G
#e2fsck -f casper-rw
#resize2fs casper-rw

創造一顆新的:
#dd if=/dev/zero of=casper-rw bs=1M count=1024 
#mkfs.ext3 casper-rw

曾經想辦法突破4GB,受限於FAT32大小只能支援到此,
ext3 -> 可booting 更換不了超過4GB 
ext2 -> 開機不能
ext4 -> 開機不能
ntfs -> ... 你在開玩笑嗎?

只好認命了。

這種手法來記錄file system 的修改,印象似乎在OPENWRT也是如此,時光有限,待有緣再分享。

[Linux] dlopen 和 dlsym

我都說這些是放再經書 (C tools) 最末頁妖魔鬼怪API ....

原理網路上很多,這裡簡單筆記就好。

2014年12月3日 星期三

[Bash] bash_completion - 命令強迫補完計畫 (?

沒有計畫~ 只有... 搗蛋

最近幾版的 Ubuntu lubuntu  的兔兔娘... command line 跑起來頗靈異

當發生
make <tab> <tab> 連按很多下會看到

--
root@bbG:~# make 23:set: command not found
23:set: command not found
--
原本是預期看到 /path/to/some/where

2014年11月24日 星期一

[Linux] lubuntu - Unity byebye

Unity you are so xxxx......

恩.. 最近一台工作Server 整個partition 被掛載成 read-only, 稍微檢查一下應該是disk checking 壞軌,很大心的就給他"呂布"...下去

掛了 =____________=
再起不能。
不要逼我換最新版的烏奔兔,那個U什麼跟什麼nity的好難用又好醜....

幸好... 跟我一樣煩惱的人很多....

2014年11月11日 星期二

[Kernel] 叫你的kernel 跑你程式

Ask your kernel to run your mama userspace process

上面僅供參考。

通常來說Linux kernel/user space 分際是很嚴謹的,尤其是記憶體存取,往往得靠 copy_to_user copy_from_user 至於操作就更多了,netlink、 proc、ioctl 、open/read/write/fcntl。
Linux效率上會輸給輕鬆達成zero-copy 的Cisco IOS,看完IOS的Source code發現根本就是逆天阿(下略5千字...),天生作message/packet control 的奇才....  @@

既然兩個模式楚河漢界,能突破這種規範就真的非常值得玩玩。

下面就一起來跑你.....(下略


2014年10月25日 星期六

[五四三] TPMS 胎壓偵測~裝裝裝

其實是看到這篇文章....

平常開自己也都是疑神疑鬼的...  總是感覺輪胎都偷偷不認真工作!!! 大概是之前中過幾次釘,研究了一下市面上貨色,胎內胎外什麼。

最後決定來裝 ORO 的 W401B 省電型的,好像買個接收器還可以跟車上的目擊者整合耶,雖然這樣,最近目擊者有點秀逗,還是不要整再一起好了,免得一起過世。


2014年10月20日 星期一

[五四三] 讓Line 更方便打電話


現在網路都跑到4G的速度,支撐語音流量早就是一塊蛋糕,二話不說,先去電信局轉平板專案,把話租降到最低 --> $0,這方案還是可以講電話啦,只是僅有區區一百塊的額度,超過就是網內$3網外$6, 還好網路4G頗快,要好好用網路的優勢,把語音的部分也轉到網路使用才對。


2014年6月3日 星期二

[C code] dup() dup2() 奇妙的FD複製....

好吧...
是突然看到
--
close(0); close(1); close(2);
    if (!tty || !*tty) {
        if (open("/dev/null", O_RDWR|O_NONBLOCK) >= 0)
            dup(0), dup(0);
        return;
    }
--

這沒營養dup(0) 還作兩次,WHY?!
仔細想一下,突然讓人笑出來...  哈,果然不是那麼沒營養...


2013年12月26日 星期四

[Compiler] Different between gcc and g++

這幾天在玩cross-compiler 的重build,換來換去,突然發現 gcc 跟 g++ 的差別呢?

當然
"g++ 是C++ 的compiler, gcc 是C的compiler" 這個說法隨便google就一堆文章(還都是CP的) 跟你說.... 喔不... 它們不是這樣的!!!

光看不過癮,來手動證明一下。(絕對不是為了一天一筆記的目標亂充數!!!)


2013年12月24日 星期二

[ATV] 免JB - 新增你的頻道 in Apple TV (自製)

在獲得好色龍大人首肯之後,把目前的ATVDoMore打包起來
讓普通使用者能輕鬆使用。還可以播放你硬碟的電影喔。

這樣就可以躺在床上用電視龍大的翻譯轉播了!!! 馬鈴薯沙發我來啦!!!

元件教學寫在先前的筆記
http://bjglife.blogspot.tw/2013/12/atv-apple-tv-do-more.html


2013年12月23日 星期一

[NPM] 發行自己的套裝組 npm publish

發行耶!!!

把自己的nodeJS 作品放到資料庫上面讓人下載。 <--- 抖抖

也就是說以後只要:
#npm install mypackage

大家都能安裝你的寫的軟體。

有妹有很威...


2013年12月16日 星期一

[ATV] Apple TV do more - 自訂你的頻道

在台灣用Apple TV有一種很殘廢的感覺,對吧...

幾乎沒東西可以看,只能玩玩Air Play(還好有這個)... 最強大的就是Youtube,但..誰要在上面看精選影片 (凸,硬碟裡面精選的還比較多。
幸好江湖流傳Apple TV 有一招 DNS 挾持密技,把原本預告片的頻道挾持成一個新的窗口。
然後就打開花花世界,各種對岸的影片內容任你看,問題是AppleTV 給對岸挾持,挾持耶!!!怎麼想都毛毛的... 不如就動手來做一個給自己用,手工做食品安全又健康 上面的頻道不只慢其實也沒很對胃口。
這僅提供私人使用,切勿商業,隨便改機不負責任。
也就是說在家裡自己改一改變很好用就好了,乖~~~。

2013年12月11日 星期三

2013年12月6日 星期五

[ChromeCast] Install ChromeCast "Emulate" to Linux

想要 $35 鎂的 ChromeCast 嗎?
動手裝一台吧孩子 XD
麗娜斯小妹妹親切服務喔 >////////////<


2013年12月5日 星期四

[GIT] Source list for git stable version

Meet issue: (when using repo tool)
Exited sync due to gc errors

This is because git version is too old. So wee renew it 


my sytem is Lucid (10.04) 

add to source-list
---
deb http://ppa.launchpad.net/git-core/ppa/ubuntu lucid main 
deb-src http://ppa.launchpad.net/git-core/ppa/ubuntu lucid main 
--

then update git

2013年12月4日 星期三

[Chrome] 找回你的 Chrome

恩...  上次搞爆後突然想到... apt source-list 裡面是沒有 chrome 的。in 麗娜斯 10.04 LTS

好吧。那我來手動裝上妹妹的眼睛。