mirror of
https://github.com/KolibriOS/kolibrios.git
synced 2025-09-20 09:47:28 -04:00
kernel: Clean up svn-related code and data
* Rearrange sf18.13 version structure to + mention git hash and release offset, + separate OS release and kernel ABI numbers, + include an optional debug tag. * Update the boot log and the blue screen to print the new fields. * Update docs. * No breaking changes. Resolves #99.
This commit is contained in:
parent
0e7cff0715
commit
55d641b0da
@ -890,10 +890,6 @@ for i,v in ipairs(img_files) do
|
||||
str = string.gsub(str, "%%", "%%%%") -- escape % as %%
|
||||
cmd += " && str=" .. str
|
||||
cmd += ' && echo -n $str | dd status=none of=%o bs=1 seek=`expr 274 - length "$str"` conv=notrunc'
|
||||
str2='$(get-current-cmtid|grep -oE "\\+[0-9]+")'
|
||||
str2 = string.gsub(str2, "%$", "\\$") -- escape $ as \$
|
||||
cmd += " && str2=" .. str2
|
||||
cmd += ' && echo -n $str2 | dd status=none of=%o bs=1 seek=216 conv=notrunc'
|
||||
end
|
||||
local_file = VAR_KERNEL .. "/.kernel.mnt"
|
||||
tup.definerule{inputs = {v[2]}, command = cmd, outputs = {local_file}}
|
||||
|
@ -3,10 +3,25 @@ HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../programs" or tup.getco
|
||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
||||
add_include(tup.getvariantdir())
|
||||
|
||||
-- environment variables
|
||||
tup.import("KOLIBRIOS_BUILD_OFFSET") -- 1234
|
||||
tup.import("KOLIBRIOS_BUILD_CMTID") -- 0xaabbccdd
|
||||
tup.import("KOLIBRIOS_BUILD_DBGTAG") -- 0x61 for 'a', etc
|
||||
|
||||
str_build = ""
|
||||
if KOLIBRIOS_BUILD_OFFSET then
|
||||
str_build += " -dBUILD_OFFSET=" .. KOLIBRIOS_BUILD_OFFSET
|
||||
end
|
||||
if KOLIBRIOS_BUILD_CMTID then
|
||||
str_build += " -dBUILD_CMTID=" .. KOLIBRIOS_BUILD_CMTID
|
||||
end
|
||||
if KOLIBRIOS_BUILD_DBGTAG then
|
||||
str_build += " -dBUILD_DBGTAG=" .. KOLIBRIOS_BUILD_DBGTAG
|
||||
end
|
||||
|
||||
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"})
|
||||
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o " .. tup.getconfig("KERPACK_CMD"), "kernel.mnt")
|
||||
--tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o -s %o.fas" .. tup.getconfig("KERPACK_CMD"), {"kernel.mnt", extra_outputs = {"kernel.mnt.fas"}})
|
||||
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o -s %o.fas" .. str_build .. tup.getconfig("KERPACK_CMD"), {"kernel.mnt", extra_outputs = {"kernel.mnt.fas"}})
|
||||
--tup.rule({"kernel.mnt.fas", extra_inputs = {"kernel.mnt"}}, "symbols %f %o", "kernel.mnt.sym")
|
||||
--tup.rule({"kernel.mnt.fas", extra_inputs = {"kernel.mnt"}}, "listing %f %o", "kernel.mnt.lst")
|
||||
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o -dextended_primary_loader=1" .. tup.getconfig("KERPACK_CMD"), "kernel.mnt.ext_loader")
|
||||
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o -dpretest_build=1 -ddebug_com_base=0xe9", "kernel.mnt.pretest")
|
||||
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o " .. str_build .. " -dextended_primary_loader=1 " .. tup.getconfig("KERPACK_CMD"), "kernel.mnt.ext_loader")
|
||||
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, FASM .. " -m 262144 %f %o " .. str_build .. " -dpretest_build=1 -ddebug_com_base=0xe9", "kernel.mnt.pretest")
|
||||
|
@ -28,36 +28,42 @@ macro line_space {
|
||||
db 186
|
||||
}
|
||||
d80x25_top:
|
||||
line_full_top
|
||||
if __REV__ > 0
|
||||
line_full_top
|
||||
; draw seven digits of the git hash
|
||||
__x = BUILD_CMTID
|
||||
if __x > 0
|
||||
__x = __x SHR 4
|
||||
cur_line_pos = 75
|
||||
store byte ' ' at d80x25_top+cur_line_pos+1
|
||||
rev_var = __REV__
|
||||
while rev_var > 0
|
||||
store byte rev_var mod 10 + '0' at d80x25_top+cur_line_pos
|
||||
cur_line_pos = cur_line_pos - 1
|
||||
rev_var = rev_var / 10
|
||||
end while
|
||||
store byte ' ' at d80x25_top+cur_line_pos
|
||||
store dword ' SVN' at d80x25_top+cur_line_pos-4
|
||||
store byte ' ' at d80x25_top+cur_line_pos+1
|
||||
repeat 7
|
||||
digit = __x AND 0xf
|
||||
if digit > 9
|
||||
digit = digit - 10 + 'a'
|
||||
else
|
||||
digit = digit + '0'
|
||||
end if
|
||||
store byte digit at d80x25_top+cur_line_pos
|
||||
cur_line_pos = cur_line_pos - 1
|
||||
__x = __x SHR 4
|
||||
end repeat
|
||||
store byte ' ' at d80x25_top+cur_line_pos
|
||||
store dword ' GIT' at d80x25_top+cur_line_pos-4
|
||||
end if
|
||||
|
||||
space_msg:
|
||||
line_space
|
||||
line_space
|
||||
verstr:
|
||||
; line_space
|
||||
; version string
|
||||
db 186,32
|
||||
repeat 78
|
||||
load a byte from kernel_header.signature+%-1
|
||||
if a = 13
|
||||
break
|
||||
end if
|
||||
db a
|
||||
end repeat
|
||||
repeat 78 - ($-verstr)
|
||||
db ' '
|
||||
end repeat
|
||||
db 32,186
|
||||
line_half
|
||||
db 186,32
|
||||
repeat 78
|
||||
load a byte from kernel_header.signature+%-1
|
||||
if a = 13
|
||||
break
|
||||
end if
|
||||
db a
|
||||
end repeat
|
||||
repeat 78 - ($-verstr)
|
||||
db ' '
|
||||
end repeat
|
||||
db 32,186
|
||||
line_half
|
||||
d80x25_top_num = 4
|
||||
|
@ -24,9 +24,38 @@ org 0
|
||||
; struct kernel_header
|
||||
jmp start_of_code ; jump
|
||||
db 'KolibriOS ' ; signature
|
||||
db 'v0.7.7.0 ',13,10,13,10,0 ; FIXME: get distribution version from git tag
|
||||
db 'v0.7.7.0' ; FIXME: get distribution version from git tag?
|
||||
.offset db ' ',13,10,0
|
||||
dd B32-KERNEL_BASE ; offset of the kernel's 32-bit entry point
|
||||
|
||||
cur_line_pos = 0
|
||||
offset_len = 0
|
||||
__x = BUILD_OFFSET
|
||||
if __x > 0
|
||||
store byte '+' at .offset+cur_line_pos
|
||||
if __x < 10
|
||||
offset_len = 2 ; '+' and a digit
|
||||
else if __x < 100
|
||||
offset_len = 3
|
||||
else if __x < 1000
|
||||
offset_len = 4
|
||||
else if __x < 10000
|
||||
offset_len = 5
|
||||
else
|
||||
offset_len = 6
|
||||
end if
|
||||
cur_line_pos = cur_line_pos + offset_len - 1
|
||||
while __x > 0
|
||||
store byte __x mod 10 + '0' at .offset+cur_line_pos
|
||||
cur_line_pos = cur_line_pos - 1
|
||||
__x = __x / 10
|
||||
end while
|
||||
end if
|
||||
if BUILD_DBGTAG > 0
|
||||
store byte '-' at .offset+offset_len
|
||||
store byte BUILD_DBGTAG at .offset+offset_len+1
|
||||
end if
|
||||
|
||||
include "boot/bootstr.inc" ; language-independent boot messages
|
||||
include "boot/preboot.inc"
|
||||
|
||||
|
@ -227,6 +227,33 @@ struct kernel_header
|
||||
; KERNEL.MNT file can be booted on BIOS as well as on UEFI.
|
||||
ends
|
||||
|
||||
struct kernel_version
|
||||
; OS release number, e.g. 0,7,7,0. Distro-specific.
|
||||
osrel rb 4
|
||||
; A single char like 'a' to append to the version, or 0 to omit it.
|
||||
; 0 means 0.7.7.0+1234, 'a' means 0.7.7.0+1234-a, etc.
|
||||
; This allows developers to determine the debug build by its log.
|
||||
; Unfortunately, users sometimes mess things and test not the build they
|
||||
; were asked to test.
|
||||
dbgtag db ?
|
||||
; The kernel itself doesn't have any version other than its ABI version.
|
||||
; The minor and major parts were meant to mean significant compatible
|
||||
; and incompatible changes correspondingly. It is for a developer to
|
||||
; decide on what is a significant change.
|
||||
abimin db ?
|
||||
; The major ABI version must be at least 0x28 for backward compatibility
|
||||
; with the old revision number: 0x2800 = 10240 > the last SVN revision.
|
||||
abimaj dw ?
|
||||
; In binary, e.g. a short git hash. A single dword is 8 digits which
|
||||
; should be enough for the foreseeable future. We always can get space
|
||||
; for four more digits from the two reserved bytes below if needed.
|
||||
cmtid dd ?
|
||||
reserved dw ?
|
||||
; The number of commits from the last release.
|
||||
offset dw ?
|
||||
ends
|
||||
assert sizeof.kernel_version = 16
|
||||
|
||||
DRIVE_DATA_SIZE = 16
|
||||
|
||||
OS_BASE = 0x80000000
|
||||
|
@ -970,13 +970,21 @@ picture rb Xsize*Ysize*4 ; 32 бита
|
||||
размером 16 байт для будущей совместимости, в будущем могут быть
|
||||
добавлены некоторые поля.
|
||||
Структура буфера:
|
||||
db a,b,c,d для версии a.b.c.d
|
||||
db 0: зарезервировано
|
||||
dd REV - номер svn-ревизии ядра
|
||||
Для ядра Kolibri 0.7.7.0+:
|
||||
db a,b,c,d для версии ОС a.b.c.d
|
||||
db отладочная метка, для релиза всегда 0, иначе любой символ ASCII
|
||||
db младшая часть ABI ядра
|
||||
dw старшая часть ABI ядра
|
||||
dd идентификатор коммита, например краткий git-хэш в бинарном виде
|
||||
dw зарезервировано
|
||||
dw количество коммитов с момента последнего релиза
|
||||
Пример структуры для ядра Kolibri 0.7.7.0+:
|
||||
db 0,7,7,0
|
||||
db 0
|
||||
dd 1675
|
||||
db 0
|
||||
dw 40
|
||||
dd 0xf26d5b28
|
||||
dw 0
|
||||
dw 1675
|
||||
|
||||
---------------------- Константы для регистров: ----------------------
|
||||
eax - SF_SYSTEM (18)
|
||||
|
@ -962,13 +962,21 @@ Remarks:
|
||||
16 byte buffer for the future compatibility, in the future
|
||||
some fields can be added.
|
||||
Structure of the buffer:
|
||||
db a,b,c,d for version a.b.c.d
|
||||
db 0: reserved
|
||||
dd REV - kernel SVN revision number
|
||||
For Kolibri 0.7.7.0+ kernel:
|
||||
db a,b,c,d for os version a.b.c.d
|
||||
db debug tag, 0 for release, any ASCII char otherwise
|
||||
db kernel ABI minor
|
||||
dw kernel ABI major
|
||||
dd commit id, e.g. short git hash in binary
|
||||
dw reserved
|
||||
dw the number of commits since the latest release
|
||||
For Kolibri 0.7.7.0+ the structure is like this:
|
||||
db 0,7,7,0
|
||||
db 0
|
||||
dd 1675
|
||||
db 0
|
||||
dw 40
|
||||
dd 0xf26d5b28
|
||||
dw 0
|
||||
dw 1675
|
||||
|
||||
---------------------- Constants for registers: ----------------------
|
||||
eax - SF_SYSTEM (18)
|
||||
|
@ -30,6 +30,8 @@ format binary as "mnt"
|
||||
include 'macros.inc'
|
||||
include 'struct.inc'
|
||||
|
||||
ABI_MAJOR = 0x28
|
||||
ABI_MINOR = 0
|
||||
|
||||
USE_COM_IRQ = 1 ; make irq 3 and irq 4 available for PCI devices
|
||||
VESA_1_2_VIDEO = 0 ; enable vesa 1.2 bank switch functions
|
||||
@ -711,10 +713,33 @@ end if
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
; show SVN version of kernel on the message board
|
||||
; show OS version, offset, debug tag and commit id on the message board
|
||||
;-----------------------------------------------------------------------------
|
||||
mov eax, [version_inf.rev]
|
||||
DEBUGF 1, "K : kernel SVN r%d\n", eax
|
||||
mov eax, version_inf.osrel
|
||||
DEBUGF 1, "K : OS version: %u.%u.%u.%u", [eax+0]:1, [eax+1]:1, \
|
||||
[eax+2]:1, [eax+3]:1, ecx
|
||||
movzx ecx, [version_inf.offset]
|
||||
jecxz @f
|
||||
DEBUGF 1, "+%u", ecx
|
||||
@@:
|
||||
movzx ecx, [version_inf.dbgtag]
|
||||
jecxz @f
|
||||
push ecx
|
||||
mov ecx, esp
|
||||
DEBUGF 1, "-%s", ecx
|
||||
pop ecx
|
||||
@@:
|
||||
DEBUGF 1, "\n"
|
||||
mov ecx, [version_inf.cmtid]
|
||||
jecxz @f
|
||||
DEBUGF 1, "K : Commit ID: %x\n", ecx
|
||||
@@:
|
||||
;-----------------------------------------------------------------------------
|
||||
; show kernel ABI
|
||||
;-----------------------------------------------------------------------------
|
||||
movzx eax, [version_inf.abimaj]
|
||||
movzx ecx, [version_inf.abimin]
|
||||
DEBUGF 1, "K : Kernel ABI: %u.%u\n", eax, ecx
|
||||
;-----------------------------------------------------------------------------
|
||||
; show CPU count on the message board
|
||||
;-----------------------------------------------------------------------------
|
||||
@ -2102,12 +2127,12 @@ sysfn_getdiskinfo: ; 18.11 = get disk info table
|
||||
;------------------------------------------------------------------------------
|
||||
sysfn_getversion: ; 18.13 = get kernel ID and version
|
||||
; if given memory address belongs to kernel then error
|
||||
stdcall is_region_userspace, ecx, version_inf.size
|
||||
stdcall is_region_userspace, ecx, sizeof.kernel_version
|
||||
jnz .addr_error
|
||||
|
||||
mov edi, ecx
|
||||
mov esi, version_inf
|
||||
mov ecx, version_inf.size
|
||||
mov ecx, sizeof.kernel_version
|
||||
rep movsb
|
||||
ret
|
||||
.addr_error: ; if given memory address is illegal
|
||||
@ -2287,11 +2312,18 @@ sound_flag db 0
|
||||
endg
|
||||
|
||||
iglobal
|
||||
version_inf:
|
||||
db 0,7,7,0 ; FIXME: Get distribution version from git tag
|
||||
db 0
|
||||
.rev dd __REV__
|
||||
.size = $ - version_inf
|
||||
if ~ definite BUILD_DBGTAG
|
||||
BUILD_DBGTAG = 0
|
||||
end if
|
||||
if ~ definite BUILD_CMTID
|
||||
BUILD_CMTID = 0
|
||||
end if
|
||||
if ~ definite BUILD_OFFSET
|
||||
BUILD_OFFSET = 0
|
||||
end if
|
||||
align 4
|
||||
version_inf kernel_version <0,7,7,0>, BUILD_DBGTAG, ABI_MINOR, ABI_MAJOR, \
|
||||
BUILD_CMTID, 0, BUILD_OFFSET
|
||||
endg
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
@ -4457,8 +4489,6 @@ end if
|
||||
|
||||
include "data32.inc"
|
||||
|
||||
__REV__ = __REV
|
||||
|
||||
if ~ lang eq es_ES
|
||||
diff16 "end of kernel code",0,$
|
||||
end if
|
||||
|
@ -5,16 +5,6 @@
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
__REV = 0
|
||||
|
||||
macro $Revision a {
|
||||
match =: Num =$,a \{
|
||||
if __REV < Num
|
||||
__REV = Num
|
||||
end if
|
||||
\}
|
||||
}
|
||||
|
||||
;// mike.dld, 2006-29-01 [
|
||||
|
||||
; macros definition
|
||||
|
Loading…
x
Reference in New Issue
Block a user