跳到主要內容

整理眾多、顯得有點雜亂的檔案並加上 Makefile

目前為止,檔案有些多且雜亂。

$ tree
.
├── a.img
├── boot
│   ├── boot.asm
│   ├── include
│   │   ├── fat12hdr.inc
│   │   ├── load.inc
│   │   └── pm.inc
│   └── loader.asm
├── include
│   ├── const.h
│   ├── protect.h
│   └── type.h
├── kernel
│   ├── kernel.asm
│   └── start.c
└── lib
    ├── kliba.asm
    └── string.asm

與此同時,編譯、連結的指定越來越多,我們採用 Makefile 來解決此問題。

Makefile

################
# Makefile for Orange'S
################

# Entry point of Orange'S
# It must have the same value with 'KernelEntryPointPhyAddr; in load.inc!
ENTRYPOINT = 0x30400

# Offset of entry point in kernel file
# It depends on ENTRYPOINT
ENTRYOFFSET = 0x400

# Programs, flags, etc.
ASM   = nasm
DASM  = ndisam
CC   = gcc
LD   = ld
ASMBFLAGS = -I boot/include/
ASMKFLAGS = -I include/ -f elf
CFLAGS  = -I include/ -c -fno-builtin
LDFLAGS  = -s -Ttext $(ENTRYPOINT)
DASMFLAGS = -u -o $(ENTRYPOINT) -e $(ENTRYOFFSET)

# This program
ORANGESBOOT  = boot/boot.bin boot/loader.bin
ORANGESKERNEL = kernel.bin
OBJS   = kernel/kernel.o kernel/start.o lib/kliba.o lib/string.o
DASMOUTPUT  = kernel.bin.asm

# All Phony Targets
.PHONY : everything final image clean realclean disasm all buildimg

# Default starting position
everything : $(ORANGESBOOT) $(ORANGESKERNEL)

all : realclean everything

final : all clean

image : final buildimg

clean :
 rm -f $(OBJS)

realclean :
 rm -f $(OBJS) $(ORANGESBOOT) $(ORANGESKERNEL)

disasm :
 $(DASM) $(DASMFLAGS) $(ORANGESKERNEL) > $(DASMOUTPUT)

# We assume that "a.img" exists in current folder
buildimg :
 mkdir tmp
 dd if=boot/boot.bin of=a.img bs=512 count=1 conv=notrunc
 sleep 1
 sudo mount -o loop a.img tmp
 sleep 1
 sudo cp -fv boot/loader.bin tmp
 sudo cp -fv kernel.bin tmp
 sleep 1
 sudo umount tmp
 sleep 1
 rmdir tmp

boot/boot.bin : boot/boot.asm boot/include/load.inc boot/include/fat12hdr.inc
 $(ASM) $(ASMBFLAGS) -o $@ $<

boot/loader.bin : boot/loader.asm boot/include/load.inc boot/include/fat12hdr.inc boot/include/pm.inc
 $(ASM) $(ASMBFLAGS) -o $@ $<

$(ORANGESKERNEL) : $(OBJS)
 $(LD) $(LDFLAGS) -o $(ORANGESKERNEL) $(OBJS)

kernel/kernel.o : kernel/kernel.asm
 $(ASM) $(ASMKFLAGS) -o $@ $<

kernel/start.o : kernel/start.c include/type.h include/const.h include/protect.h
 $(CC) $(CFLAGS) -o $@ $<

lib/kliba.o : lib/kliba.asm
 $(ASM) $(ASMKFLAGS) -o $@ $<

lib/string.o : lib/string.asm
 $(ASM) $(ASMKFLAGS) -o $@ $<

嘗試修改 kernel/start.c,在 cstart() 函數最後增加一行,

disp_str("-----\"cstart\" ends-----\n");

並進行指令
$ make image

最後的執行畫面

留言

這個網誌中的熱門文章

VLC c# 順利編譯

原文網址: http://www.cnblogs.com/haibindev/archive/2011/12/21/2296173.html 原文作者: haibindev 原文標題:c#万能视频播放器 本文的重點在於修正 class VlcPlayer,使其能順利在 VC# Express 2010 .Net Framework 4 下順利編譯。 修正重點在於 CallingConvention = CallingConvention. StdCall 改成 CallingConvention = CallingConvention. Cdecl using System; using System.Runtime.InteropServices; using System.Security; using System.Text; namespace VlcDotNet { class VlcPlayer { private IntPtr libvlc_instance_; private IntPtr libvlc_media_player_; private double duration_; public VlcPlayer(string pluginPath) { string plugin_arg = "--plugin-path=" + pluginPath; string[] arguments = { "-I", "dummy", "--ignore-config", "--no-video-title", plugin_arg }; libvlc_instance_ = LibVlcAPI.libvlc_new(arguments); libvlc_media_player_ = LibVlcAPI.libvlc_media_player_new(libvlc_instance_); } public ...

用 C# 批次控制 Word 合併列印

前由 我有全區的電話資料,問題在於我要依不同里別來製作出電話簿。結果如下圖: 單純採用合併列印無法達成我的需求。解決方法係用「功能變數」儲存上一個里別,與現在里別進行比較:若不同,則換頁。不過,這樣功能變數還蠻長的。最後,我還是採用 C# 來解決。 解決方案 用 C# 控制 WORD 中合併列印的「資料來源 Data Source」,給予不同里別的「sqlstatement」。迴圈處理不同的里別即可。但可預見其處理過程會很慢,不過還好,我可以不用在意它,有跑出結果即可。 程式碼 IList<string> areas = new List<string>() { "後壁", "侯伯", "嘉苳", "土溝", "嘉田", "嘉民", "菁豊", "崁頂", "後廍", "墨林", "菁寮", "新嘉", "頂長", "平安", "仕安", "竹新", "新東", "長安", "頂安", "福安", "烏樹" }; string root = @"D:\"; // 根目錄 string data = root + @"\data.docm"; // 資料檔(即資料來源) string template = root + @"\template.docx"; // 已設定好格式與合併欄位的 Word 檔 string output = @"d:\Final"; // 輸出之資料夾 object oMissing = System.Reflection.Missing.Va...

轉貼:學術期刊投稿術語 (整理篇)

本文引用自:http://tw.myblog.yahoo.com/jw!9vXcVE.ZFRoOCUcZ5Y4Hmg--/article?mid=144&sc=1 原作者及部落格:熱帶魚、 熱帶魚的部落格 國際學術期刊投稿術語與流程 01. Submitted to Journal 論文剛提交後的狀態(系統會自動顯示) (記得先確認系統所轉換的PDF檔內容是否有誤,無誤後記得按"確認",才會開始進行初步審查) 02. Manuscript received by Editorial Office 你的論文已到編輯手裡(證明投稿成功) (這時Editor就會給你的論文一個"manuscript number"以供查詢之用>>view submission的PDF檔) 03. With editor 如果在投稿時没有要求選擇編輯,就先到主编那裡,主编會分派给别的編輯。這當中就會有另兩個狀態: 3.1. Waiting Editor Assignment 指派責任編輯 (Editor assigned 是把你的文章分给一個編輯處理) 3.2. Editor Declined Invitation (Editor Invited)如果编輯接手處理了就會邀請審稿人。 04. 随後也會有兩種狀態 4.1. Decision Letter Being Prepared 就是編輯没找審稿人就自己决定了,根據一般經驗,對學生來說估計會掛了: (1)英文太差,編輯建議你再修改。 (2)内容太差或投稿的論文領域不符合,要拒絕了。除非直接被接收啦!(還是別做太多白日夢...... >_ 4.2. Reviewer(s) invited 尋找審稿人中,等待他們審稿 05. Under Review 開始審稿 這應該是一個漫長的等待。當然前面各步驟也可能很慢,就看編輯的處理情况。 若被邀請審稿人不想審稿或在期限內無法提交意見時,编輯會重新邀請别的審稿人重新審查。 06. Required Reviews Completed 審稿人的意見已上傳,審稿結束,等待編輯决定 07. Evaluating Recommendation (...