[01:18] 早 [01:40] 早 [01:43] 澡 [02:07] 早 [02:29] 沒想到有人回應 XD === gasol is now known as gasol___ [02:39] rick__: 在 ld script SECTIONS 裡說明下就行 .rodata : { rodata_start = .; /*記錄開始地址*/ *(.rodata); . = rodata_start + 0x12340; /*在末尾設定下當前地址(同時也就指定大小了)*/ } === gasol___ is now known as gasol__30km__ === gasol__30km__ is now known as ronnywang [03:11] Kandu, . = ALIGN(4); [03:11] .rodata : { *(.rodata) } [03:11] . = ALIGN(4); [03:11] .data : { *(.data) } [03:11] . = ALIGN(4); [03:11] .got : { *(.got) } [03:13] 我在 u-boot.lds 看到 這個 , 所 以是不是指我可以把 .rodata 那行的 格式換成 有 rodat_start的 格式? [03:13] 會想改這個主要是有時 build 出來的 u-boot 開不了機 [03:14] rick__: 是啊 [03:14] 結果發 現rodata 的 最後一筆資料位址, 比 rodata 的 起始位址加上 length 還大 [03:14] 所 以我猜應該 是 rodata 節區爆了 [03:14] 那我改看看 :D 謝 謝 [03:15] rick__: 呃,那不行吧,這樣會出錯 [03:15] 另外請教 default 的長度定義是寫在哪啊 ? [03:16] BlueT_, 這証明這裡是有早鳥的 xdd [03:16] rick__: *(.rodata) 把所有 input file 的 rodata section 都置入 output 過大了,蠻力縮小 rodata section 應該會出錯 [03:19] Kandu, 我希望能確保 rodata section 夠大, [03:20] 在載入kernel前, bootloader 可以用到所有的 記憶體..所以多用些應該沒關係 [03:21] rick__: 哦,那倒是可以。那就在 (.rodata) /*這裡*/ } 寫上 . = . + 要擴大的 size [03:28] 只是我不懂 為什麼我有時加太多 printf() 之後, build 出來的 u-boot 不能開機 [03:29] 我以為預設的 lds 應該是會依當時的section 大小去自動調整 [03:36] rick__: 確實是自己調整,大概是你計算 length 的代碼有錯吧 [03:37] 我一般的寫法是 [03:37] .data : [03:37] { [03:37] PROVIDE(AddrBegin_data = .); [03:37] *(.data) [03:37] . = ALIGN(0x1000); [03:37] PROVIDE(AddrEnd_data = .); [03:37] } [03:39] rick__: 然後 宣告 extern void * AddrBegin_data; extern void * AddrEnd_data 然後用 &AddrEnd_data - &AddrBegin_data 這樣就是整個 section 的 size 了 [03:40] rick__: 這樣不管匯入了多少 input file 的 data section 都能自動計算出真正的 size [03:42] rick__: 按剛說的「發 現rodata 的 最後一筆資料位址, 比 rodata 的 起始位址加上 length 還大」,應該是計算 length(size) 的代碼有問題了 [03:47] 請問 ALIGN 是? [03:51] rick__: 我是自己寫 MM,為了 MM 的 initialization 方便,所以用頁大小(0x1000)對齊,這個沒關係。主要就是在 section 最開頭 PROVIDE 一個 symbol, 最後一個 symbol 方便計算整個 section 的大小 [03:54] Kandu, 所以指的是每個 section 起頭都是 0x1000的倍數嗎? [03:56] rick__: 嗯 [03:57] rick__: 剛有個疏忽 &AddrEnd_data - & AddrBegin_data 要 cast 下 (unsigned int)&a - (unsigned int)&b 這樣 (我不熟 c 語言 :) [04:01] Kandu, 謝謝 :D 我再試看看, 這兩天要先搞 hardware ecc 跟 ubifs 的事...一直 ecc fail QQ [04:04] rick__: XD 若有空,讀下 ld manual 應會不錯 http://sourceware.org/binutils/docs/ld/ === ronnywang is now known as gasol [04:54] Kandu, 感謝 :D === aw is now known as Guest1699 [05:42] asd === Daindese is now known as Dainese