When you use "fdisk /dev/sda", fdisk will set disk_device(this is an global) to "/dev/sda".
Then into the main loop.
If you enter "n" it will call new_partition().
The key point of new_partition() is add_partition(index, type);
The size is set in the read_int() of add_partition()
2013年12月26日 星期四
2013年12月25日 星期三
printf 印出 IP address
最近 trace code(u-boot) 時發現,printf 現在可以印出 IP 及 MAC 之類的 address 型態。
%pI4:印出IPv4位址,變數型態為 unsigned long 的指標。
%pI6:印出IPv6位址,變數型態為 unsigned ling 的指標。
%pM:印出MAC位址,變數型態為 unsigned char 的指標。
這樣它就可以直接把 IP, MAC address 印出來。
EX:
typedef ulong IPaddr_t;
IPaddr_t NetOurSubnetMask;
printf("NetOurSubnetMask : %pI4\n", &NetOurSubnetMask);
unsigned char env_enetaddr[6];
printf("Address in environment is %pM\n", env_enetaddr);
而變數裡面的值,IP的部份就是16進制的值直接連在一起。
例如:
192.168.10.100 => C0A80A64
192 = C0
168 = A8
10 = 0A
100 = 64
MAC 的部份也是一樣是16進制的值,所以用 %s、%c會印不出來。
反而直接用%x一個一個去印是印得出來的。
這功能原本可能來自新版的 Linux Kernel 的 printk
參考:
https://www.kernel.org/doc/Documentation/printk-formats.txt
%pI4:印出IPv4位址,變數型態為 unsigned long 的指標。
%pI6:印出IPv6位址,變數型態為 unsigned ling 的指標。
%pM:印出MAC位址,變數型態為 unsigned char 的指標。
這樣它就可以直接把 IP, MAC address 印出來。
EX:
typedef ulong IPaddr_t;
IPaddr_t NetOurSubnetMask;
printf("NetOurSubnetMask : %pI4\n", &NetOurSubnetMask);
unsigned char env_enetaddr[6];
printf("Address in environment is %pM\n", env_enetaddr);
而變數裡面的值,IP的部份就是16進制的值直接連在一起。
例如:
192.168.10.100 => C0A80A64
192 = C0
168 = A8
10 = 0A
100 = 64
MAC 的部份也是一樣是16進制的值,所以用 %s、%c會印不出來。
反而直接用%x一個一個去印是印得出來的。
這功能原本可能來自新版的 Linux Kernel 的 printk
參考:
https://www.kernel.org/doc/Documentation/printk-formats.txt
2013年12月20日 星期五
Linux 提示字元
前幾天失心瘋,玩起了 Git ,在網路上亂找一些關於 Git 的資料,像是一些參數設定,GUI工具之類的。因為現在的專案管理用的是 Git ,但它強大的功能也帶來了複雜的操作,雖然不見得什麼都用得到,但有得用,不學一學,用來耍酷一下就覺得很難過。
結果其中找了一項是,在 .bash_profile 裡加入:
PS1="[\[\033[1;32m\]\w\[\033[0m\]]\[\033[1;36m\]\$(git_branch)\[\033[0;33m\]\$(git_since_last_commit)\[\033[0m\]$ "
結果其中找了一項是,在 .bash_profile 裡加入:
PS1="[\[\033[1;32m\]\w\[\033[0m\]]\[\033[1;36m\]\$(git_branch)\[\033[0;33m\]\$(git_since_last_commit)\[\033[0m\]$ "
2013年12月18日 星期三
2013年12月17日 星期二
GUI Git Client
git 雖然功能強大,不過也因為功能太強大,branch 很容易會開很多。當 branch 一多,要使用 command line 來看各 branch 之類的差異、每個 branch 的進度之類的,就不是那麼的方便了。所以開始尋找有 GUI 的 git client。
2013年11月13日 星期三
vim "取代" 指令
以前在學校,提到 VI / VIM 時,老師總會說它是個強大的編輯器。其實當時只覺得它很難用(那時用的版本還是用H、J、K、L在移動游標),不知道它強大在哪?現在跟視窗化的編輯器比起來,我想是沒有強大到哪去啦,除了它可以不需要滑鼠。不過就 command line 下,它的確是具備了不少後來視窗界面下才被覺得習以為常的功能。
2013年11月7日 星期四
C 語言預設變數 備忘
這也是一個常常會混亂的東西@@,記憶力越來越差,不知道跟什麼東西都能 Google 有關?還是年紀有關?
GCC 中有事先定義了一些變數,讓我們可用,其中 Debug 時常用的就是 __FILE__,__LINE__跟我常常會弄混的 __func__。別人都是大寫,就它是小寫。其實本來是__FUNCTION__,但後來 GNU 已經不建議使用(原因不明),所以改成了 __func__。
結果我就會搞不清到底是:
__func__,__function__,__FUNC__ 還是 __FUNCTION__。
實際上查了一下,除了這三個還有其它的,只是比較不常用。
1. __BASE_FILE__
完整的原始檔案路徑
2. __cplusplus
表示該檔案由 g++ 所編譯,當成 C++ 的檔案
3. __DATE__
編譯的日期
4. __TIME__
編譯的時間
5. __FILE__
原始檔名
6. __LINE__
所在行數
7. __VERSION__
gcc 版本
8. __func__
為了避免混淆,我就不提另一個了
GCC 中有事先定義了一些變數,讓我們可用,其中 Debug 時常用的就是 __FILE__,__LINE__跟我常常會弄混的 __func__。別人都是大寫,就它是小寫。其實本來是
結果我就會搞不清到底是:
__func__,
實際上查了一下,除了這三個還有其它的,只是比較不常用。
1. __BASE_FILE__
完整的原始檔案路徑
2. __cplusplus
表示該檔案由 g++ 所編譯,當成 C++ 的檔案
3. __DATE__
編譯的日期
4. __TIME__
編譯的時間
5. __FILE__
原始檔名
6. __LINE__
所在行數
7. __VERSION__
gcc 版本
8. __func__
為了避免混淆,我就不提另一個了
2013年11月4日 星期一
diff 參數備忘
diff 是我每次用都要查的指令@@,所以寫下來備忘一下。
diff -Naur path1 path2 > project.patch
-N In directory comparison, if a file is found in only one directory, treat it as present but empty in the other directory.
-a Treat all files as text and compare them line-by-line, even if they do not seem to be text.
-u Use the unified output format.
-r When comparing directories, recursively compare any subdirectories found.
如果要使用這個 patch 檔
patch -p# < project.patch
PS: "#" 表示要省略的路徑層數
man 的原文說明
-pnum or --strip=num
Strip the smallest prefix containing num leading slashes from each file name found in the patch file.
A sequence of one or more adjacent slashes is counted as a single slash. This controls how file names found in the patch file are treated, in case you keep your files in a different directory than the person who sent out the patch. For example, supposing the file name in the patch file was
/u/howard/src/blurfl/blurfl.c
setting -p0 gives the entire file name unmodified, -p1 gives
u/howard/src/blurfl/blurfl.c
without the leading slash, -p4 gives
blurfl/blurfl.c
and not specifying -p at all just gives you blurfl.c. Whatever you end up with is looked for either in the current directory, or the directory specified by the -d option.
diff -Naur path1 path2 > project.patch
-N In directory comparison, if a file is found in only one directory, treat it as present but empty in the other directory.
-a Treat all files as text and compare them line-by-line, even if they do not seem to be text.
-u Use the unified output format.
-r When comparing directories, recursively compare any subdirectories found.
如果要使用這個 patch 檔
patch -p# < project.patch
PS: "#" 表示要省略的路徑層數
man 的原文說明
-pnum or --strip=num
Strip the smallest prefix containing num leading slashes from each file name found in the patch file.
A sequence of one or more adjacent slashes is counted as a single slash. This controls how file names found in the patch file are treated, in case you keep your files in a different directory than the person who sent out the patch. For example, supposing the file name in the patch file was
/u/howard/src/blurfl/blurfl.c
setting -p0 gives the entire file name unmodified, -p1 gives
u/howard/src/blurfl/blurfl.c
without the leading slash, -p4 gives
blurfl/blurfl.c
and not specifying -p at all just gives you blurfl.c. Whatever you end up with is looked for either in the current directory, or the directory specified by the -d option.
2013年9月29日 星期日
Git 初學 3 - reset
用 git 好像避免不了,有時會把檔案弄亂。以前用 SVN 時好像只能重新 checkout。(也有可能有我不知道的方法?)但強大的 git 應該有辦法不需要這麼做,雖然它重新 clone 也很快。
最後我就找到了這篇:
Git 版本控制:利用 git reset 恢復檔案、暫存狀態、commit 訊息
2013年9月28日 星期六
tar.zx
上次在網路上找檔案時,找到的檔案是 tar.zx 的檔。所以它不能用以前常用的 gzip 或 bzip 來解。上網找了一下,發現現在已經很多檔案改用 zx 格式了。
我找到的文章:tar.xz format
我找到的文章:tar.xz format
2013年9月23日 星期一
Cavium SDK 2.3 DDR Debug
因為有問題懷疑跟DDR有關,所以想要印些訊息,最後找到在
bootcode/u-boot/arch/mips/cpu/octeon/lib_octeon_shared.c
中的 DDR_DEBUG 可以開啟 debug message。
這是軟體工程師的習慣,先去找 code,直接改 code。實際上人家有提供簡單的方法,經過 FAE 的指點,我去 grep 所有 'getenv("ddr_' 的字串(就是程式中有用 getenv 去抓 ddr 開頭的環境變數的地方),結果找到了:
./arch/mips/cpu/octeon/lib_octeon_shared.c
"ddr_verbose" => 印出初始化的資訊
"ddr_trace_init" => trace init 過程的訊息
"ddr_safe" => 據說是將 DDR 本來一個 clock cycle 讀取兩次,改成一次。
"ddr_narrow"
"ddr_2t"
"ddr_burst8"
"ddr_rodt_ena"
"ddr_use_ecc" => 啟動 ECC 功能,但我不知道這是什麼?
"ddr_cas_latency"
"ddr_sil_mode"
"ddr_prompt"
"ddr_debug" => 印出一些 debug message(跟我直接改 code 的結果一樣)
"ddr_four_lmc"
./arch/mips/lib/board_octeon.c
"ddr_clock_hertz" => 指定 DDR 工作時脈(不是 data rate)。小心!設定差太多,就開不起來了。
"ddr_ref_hertz" => 應該是 reference clock。
./arch/mips/cpu/octeon/lib_octeon_shared.c
"ddr_verbose" => 印出初始化的資訊
"ddr_trace_init" => trace init 過程的訊息
"ddr_safe" => 據說是將 DDR 本來一個 clock cycle 讀取兩次,改成一次。
"ddr_narrow"
"ddr_2t"
"ddr_burst8"
"ddr_rodt_ena"
"ddr_use_ecc" => 啟動 ECC 功能,但我不知道這是什麼?
"ddr_cas_latency"
"ddr_sil_mode"
"ddr_prompt"
"ddr_debug" => 印出一些 debug message(跟我直接改 code 的結果一樣)
"ddr_four_lmc"
./arch/mips/lib/board_octeon.c
"ddr_clock_hertz" => 指定 DDR 工作時脈(不是 data rate)。小心!設定差太多,就開不起來了。
"ddr_ref_hertz" => 應該是 reference clock。
2013年6月26日 星期三
2013年6月20日 星期四
Cavium Octeom u-boot 設定檔
常常在找一些設定值寫在什麼檔裡面,留下來備忘一下:
bootcode environment variables:
bootloader/u-boot/include/configs/octeon_dwc2000.h
bootcode environment variables:
bootloader/u-boot/include/configs/octeon_dwc2000.h
dts設定檔:
bootloader/u-boot/board/octeon/dwc2000/dwc2000.dts
bootcode init:(本來應該不算設定檔,但有同事在這加了 env 變數)
bootloader/u-boot/arch/mips/lib/board_octeon.c
後來發現,實際上所有的 environment variables 都應該 define 在 bootloader/u-boot/include/configs/octeon_dwc2000.h 中,也許有些本來是沒有 define,像是 CONFIG_BOOTCOMMAND(bootcmd)預設是沒有 define 的,要自己加上去。不應該加在 bootloader/u-boot/arch/mips/lib/board_octeon.c 裡面。
後來發現,實際上所有的 environment variables 都應該 define 在 bootloader/u-boot/include/configs/octeon_dwc2000.h 中,也許有些本來是沒有 define,像是 CONFIG_BOOTCOMMAND(bootcmd)預設是沒有 define 的,要自己加上去。不應該加在 bootloader/u-boot/arch/mips/lib/board_octeon.c 裡面。
eMMC pre-code
之前提過 eMMC 這個以前沒摸過的東西,造成了我們的一些困擾。目前讀出 image 這個部份,還是沒辦法解決,所以轉向用其它方式,就 RD 角度來說是可以解決,但公司的生產流程上是不是能夠處理就不知道了。
現在方法有二,一個是純軟體,就是在產測的過程中去把 eMMC 切 partition、format,然後把檔案傳進去。順便測試一下 eMMC 的存取。(至於切 partition 跟 format,可以用產測程式去送指令控制,只是步驟會比較多。不然就是修改一下 fdisk 指令,讓我們帶特定的參數時,它就會直接把 eMMC 切成我們要的狀況)
另一個方法就是,廠商現在有借我們一個 SD 卡的轉接板,eMMC放在上面,就可以插到 NB 內建的 SD 卡插槽,或是讀卡機裡。透過這個方式用 PC 產生一個母片,然後拿母片去對燒。
但是用轉接板時,在 windows XP 下,並沒有辦法對 eMMC 切 partition。所以我目前是用 Linux 來處理。
現在方法有二,一個是純軟體,就是在產測的過程中去把 eMMC 切 partition、format,然後把檔案傳進去。順便測試一下 eMMC 的存取。(至於切 partition 跟 format,可以用產測程式去送指令控制,只是步驟會比較多。不然就是修改一下 fdisk 指令,讓我們帶特定的參數時,它就會直接把 eMMC 切成我們要的狀況)
另一個方法就是,廠商現在有借我們一個 SD 卡的轉接板,eMMC放在上面,就可以插到 NB 內建的 SD 卡插槽,或是讀卡機裡。透過這個方式用 PC 產生一個母片,然後拿母片去對燒。
但是用轉接板時,在 windows XP 下,並沒有辦法對 eMMC 切 partition。所以我目前是用 Linux 來處理。
2013年6月11日 星期二
eMMC
目前手上的案子,使用了 SAMSUMG 的 eMMC,但是 HW 要找一個替代用料,最後找了 Kingston 的,不過 SAMSUNG 的是 eMMC v4.41,Kingston 的是 eMMC v4.5。為了要測試是不是相容,所以就跟廠商要了幾顆,換上去試。但是 eMMC 是用 BGA (Ball Grid Array)封裝的,它沒有金屬的接腳,而是小小的錫球。(可參考WIKI - Ball Grid Array)所以一般來說不是手工焊的,不過我們少量的情況下,就先用手焊的處理。結果他弄了兩片,全部都辦法用,所以就來找我,想要我查查是兩片都沒焊好?還是我們的 Driver 要修改?
2013年6月10日 星期一
Latex 中的 "<"與">"
我們會使用 Latex 來編輯文件,不過也不知道是什麼原因,我在 build 前人留下來的 project 時,卻發生了 "<",">" 無法正常顯示的問題。不過前人也是直接使用這兩個符號,而且產出的文件是正常的。
2013年5月28日 星期二
Git 初學 2
這篇是我又從別的地方看到了一些 git 的教學,再補充一些上一篇的不足。
原文來自:http://ihower.tw/blog/archives/2620
首先,先複習一下 branch 相關指令。大家都說 git 開 branch 不用錢。
原文來自:http://ihower.tw/blog/archives/2620
首先,先複習一下 branch 相關指令。大家都說 git 開 branch 不用錢。
- git branch <new_branch_name> 建立本地 local branch
- 如果要把新的 local branch push 上去,需要下 git push origin <local_branch_name> 指令。
- git branch -m <old_name> <new_name> 改名字 (如果有同名會失敗,改用 -M 可以強制覆蓋)
- git branch 列出目前有那些 branch 以及目前在那個 branch
- git checkout <branch_name> 切換 branch (注意到如果你有檔案修改了卻還沒 commit,會不能切換 branch)
- git checkout -b <new_branch_name> (<from_branch_name>) 本地建立 branch 並立即 checkout 切換過去
- git branch -d <branch_name> 刪除 local branch
2013年5月16日 星期四
2013年5月10日 星期五
2013年5月2日 星期四
Make a FAT image in Linux
今天嘗試要在 Linux 底下做出一個 FAT 格式的 image,目的是希望這個 image 可以在 u-boot 底下當作 raw data 寫進 eMMC flash,然後開機進 Linux 下可以當檔案存取。
網路上找到了幾個東西,可以達成接近的目標。
網路上找到了幾個東西,可以達成接近的目標。
2013年4月25日 星期四
VIM windows 版 + Taglist + Exuberant Ctags
之前看我們處長把它的 VI 改造成幾乎跟 Source Insight 一樣,我就覺得我也想來試一試,因為我也一樣覺得如果可以都用鍵盤操作,會比較順一點。(假會)
但是我們平常在寫程式的環境是遠端的 Server,也沒有裝 X-windows,平常我們都是用 Samba 把它當網路磁碟然後才個人的 Windows 上編輯。
所以我就想說,那這些套件能不能用在 windows 版的 VIM 上呢?(對 VIM 有 windows 版)
但是我們平常在寫程式的環境是遠端的 Server,也沒有裝 X-windows,平常我們都是用 Samba 把它當網路磁碟然後才個人的 Windows 上編輯。
所以我就想說,那這些套件能不能用在 windows 版的 VIM 上呢?(對 VIM 有 windows 版)
2013年4月18日 星期四
Linux 中的 HZ, tick and jiffies
最近看了一些 Linux Driver 相關的的 code,但是我發現了 HZ 這個變數,但我找不到它是哪裡來的,還有一個不知道幹嘛用的全域變數 jiffies。
沒辦法的情況下,只好問 Google 了。
Google 大大給了我這個網址:
Linux Kernel: 簡介HZ, tick and jiffies
裡面說明這這三個變數都是系統的變數,都跟時間有關。
沒辦法的情況下,只好問 Google 了。
Google 大大給了我這個網址:
Linux Kernel: 簡介HZ, tick and jiffies
裡面說明這這三個變數都是系統的變數,都跟時間有關。
2013年4月12日 星期五
2013年4月11日 星期四
Argument list too long
今天有位同學(國中同學,大學走電子系)問我,在 Linux 下,要砍掉很多檔案要怎麼辦?
用 rm -f *.* 嗎?
我建議他用 rm -f * 會比較好,Linux 裡常有些檔是沒有副檔名的。
結果他告訴我,系統回他 /bin/rm: Argument list too long
用 rm -f *.* 嗎?
我建議他用 rm -f * 會比較好,Linux 裡常有些檔是沒有副檔名的。
結果他告訴我,系統回他 /bin/rm: Argument list too long
研究室開張
我待的公司不算是什麼很好的公司,不過前人倒是有些不錯的措施,
像是建立部門內的 wiki ,也有人架了 blog,用來存放一些沒有像 wiki 裡那麼正式的內容。
但是時光飛逝、物換星移,很多前輩成了離職員工,這些系統也許有可能會消失。
而我自己也可能有一天會離開這家公司。
所以我想,還是開始來建立自己的文件庫吧,但很久沒去了解現有的各種系統的情況下, 我想就直接先開個已經有在使用的 blog 來用吧。
但是時光飛逝、物換星移,很多前輩成了離職員工,這些系統也許有可能會消失。
而我自己也可能有一天會離開這家公司。
所以我想,還是開始來建立自己的文件庫吧,但很久沒去了解現有的各種系統的情況下, 我想就直接先開個已經有在使用的 blog 來用吧。
訂閱:
文章 (Atom)