Time of Update: 2018-12-06
前幾天放了個檔案在伺服器上,忘記放哪了,連名字都忘了,只是記得檔案特別大,所以寫了個指令碼,尋找幾個最大的檔案位置。還好,通過這個指令碼找到了。1 #! /bin/sh 2 if [ $# -eq 0 ]3 then4 var=205 else6 var=$17 fi8 find .
Time of Update: 2018-12-06
gdb中顯示數組內容:p (int [10])*a一: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 5 #define NUM 10 6
Time of Update: 2018-12-06
沒辦法,自己沒有看下去,又被說了“好弱”,自嘲下,在這個實驗室,習慣了dalvik-bytecode.html中描述了位元組碼的順序,其中,OP & Formatop指示執行何種操作,Format描述了該種操作所對應的資料流格式。這是師兄的一個case,記錄下: 1 class add { 2 public static void main (String[] args) 3 { 4 int i = 2;
Time of Update: 2018-12-06
小結:uboot中_start開始執行一段程式(基本配置,這一段在6200 sdboot時已經執行過了)跳到start_unicoreboot執行,完成init_sequence[]中的一系列初始化。注意初始化序列之前gd(gd_t*類型)被賦予一個常數值,gd所指向中的bd指標也賦予一常數值。在初始化序列中,務必注意board_init中對gd->bd->bi_boot_params的賦值(0x40000100),因為在緊臨近執行theKernel (0, machid, bd-&
Time of Update: 2018-12-06
先前和師兄移植過NDK,當時不太明白,中間學會了Makefile。下邊是在網上看到的: NDK其實多了一個把.so和.apk打包的工具,這個是很重要的。而JNI開發並沒有打包,只是把.so檔案放到檔案系統的特定位置。如果是做應用開 發,則需要NDK工具,不然你開發的應用程式怎麼給使用者用呢?難道幫他重新編譯檔案系統?其他至於實現,java調用本地C/C++函數,及其編寫方式,
Time of Update: 2018-12-06
include/autoconf.mk中COFIG_LOAD_ADDR=0x40008000common/do_boom.c
Time of Update: 2018-12-06
對cache的小結,參考:Computer System A programmer's Perspective 原版_第二版locality:操作近期被其它指令所操作、或本身所操作的數或指令。good temporal locality:被引用過的儲存空間在近期被多次引用good spatial locality:被引用過的儲存空間的相鄰儲存空間在近期被多次引用資料的局部性適用於指令的局部性,但是我們很少修改指令,對於資料卻是頻繁的改動。利用temporal
Time of Update: 2018-12-06
do_bootm函數及其所調用的函數,根據頭部的定位地址(mkimage –a的參數)將zImage搬移到指定的記憶體處),根據頭部的入口地址(mkimage –e的參數)獲得head.o在記憶體中的地址,設定r0、r1、r2跳到此處執行。boot傳入r0=0,r1=machine_ID,r2=taglist (r0為0, r1為machine type, r2位參數列表的物理地址)在次過程中會開啟Icache、Dcache,來加速開機過程 程式中有一段稱為
Time of Update: 2018-12-06
gas多檔案工程摘自:Programming from Groundup Chapter 6主要目的是瞭解如何組織多檔案工程(形式) 檔案record-def.s:.equ RECORD_FIRSTNAME, 0.equ RECORD_LASTNAME, 40.equ RECORD_ADDRESS, 80.equ RECORD_AGE, 320.equ RECORD_SIZE, 324 檔案linux.s:#Common Linux Definitions#System Call
Time of Update: 2018-12-06
4 int bitcount(unsigned int n) 5 { 6 n = n - ((n>>1)&033333333333) - ((n>>2)&011111111111); 7 n = (n + (n>>3))&030707070707; 8 n = n % 0x3f; 9 return n; 10 } 17
Time of Update: 2018-12-06
3 int bit_pos(unsigned int n) 4 { 5 n = n & (-n); 6 n = n - 1; 7 n = n - ((n>>1)&0x77777777) - ((n>>2
Time of Update: 2018-12-06
執行IEEE754標準bmbm−1 . . . b1b0.b−1b−2 . . .b−n−1b−n表示: 將小數點右移近似相當於乘2,小數點左移近似相當於除2系統每隔0.1s計數器加一(系統最後計時以計數值乘以系統認為的0.1s二進位值),0.1D=0.000110011[0011]……B,我們只取小數點後23
Time of Update: 2018-12-06
格式參考Multimedia Programming Interface and Data Specifications 1.0 1 aplay -C -c 1 -f U8 -r 11025 -t wav -d 7 my.wav 2 000000 52 49 46 46 9c 2d 01 00 >RIFF.-..< 3 000008
Time of Update: 2018-12-06
mov pc, r4 @ call kernel 絕對跳轉到r4:40008000處開始執行開始進入Image,Image由vmlinux產生,所以從vmlinux開始閱讀理解。arch/unicore/kernel目錄,據其連結指令碼,從head.S開始:__lookup_processor_type:運用相對取址,取出proc_info_list,做出processor對比(因為一個鏡像支援一種processor,該processor的資訊從副處理器的c0:4d0008
Time of Update: 2018-12-06
同樣的物理地址在不同的任務中可能被描述成不同的虛擬位址。這可能導致同樣的物理地址被存入到快取兩個不同的資料項目。許多MIPS CPU沒有硬體來檢測或者避免這種快取重影(cache alias)而把問題留給作業系統的記憶體管理程式來解決。 大多數現代的 MIPS
Time of Update: 2018-12-06
Usage: mipsel-linux-objdump <option(s)> <file(s)> Display information from object <file(s)>. At least one of the following switches must be given: -a, --archive-headers Display archive header information -f, --file-headers Display
Time of Update: 2018-12-06
misc.c中函數decompress_kernel的列表四個參數是:output_start:40008000,free_mem_ptr_p:sp, free_mem_ptr_end_p:sp+64K ,arch_id:9fc (arch_num個人感覺這個英文但其會引起歧義,arch_num的中文意思應該時架構號,改成mach_id可能更適合些,mach_id對應的中文時機器號)最終解壓出的是Image放置在了40008000處unicore32-linux-objcopy -O
Time of Update: 2018-12-06
檔案sramboot.S#include"regdef.h".text.globl mainmain: .set noreorder .set noat la at, value lw a0, 0(at) lw a1, 4(at) jal my_add add a2, a0, a1 sw a2, 8(at) 檔案#include"regdef.h".text.globl my_add,valuemy_add: .set
Time of Update: 2018-12-06
出自0.12:main()也是一個函數。這是因為在編譯串連時它將會作為crt0.s組譯工具的函數被調用。crt0.s是一個樁(stub)程式,名稱中的“crt”是“C
Time of Update: 2018-12-06
android_6200/dalvik/vm/mterp/out/InterpC-portdbg.c + 467c89也支援向我這樣看待碼永遠都學不好程式,感覺好迷茫,誰麼時候能有個整體的認識?!寫個示意程式: 1 #include <stdio.h>