kernel: Clean up svn-related code and data
Some checks failed
Build system / Check kernel codestyle (pull_request) Successful in 30s
Build system / Build (pull_request) Failing after 1m49s

* 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:
2024-07-09 21:05:43 +01:00
parent 7a2e48bed2
commit ea9a3f7c6c
9 changed files with 177 additions and 68 deletions

View File

@@ -890,10 +890,6 @@ for i,v in ipairs(img_files) do
str = string.gsub(str, "%%", "%%%%") -- escape % as %% str = string.gsub(str, "%%", "%%%%") -- escape % as %%
cmd += " && str=" .. str cmd += " && str=" .. str
cmd += ' && echo -n $str | dd status=none of=%o bs=1 seek=`expr 274 - length "$str"` conv=notrunc' 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 end
local_file = VAR_KERNEL .. "/.kernel.mnt" local_file = VAR_KERNEL .. "/.kernel.mnt"
tup.definerule{inputs = {v[2]}, command = cmd, outputs = {local_file}} tup.definerule{inputs = {v[2]}, command = cmd, outputs = {local_file}}

View File

@@ -3,10 +3,25 @@ HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../programs" or tup.getco
tup.include(HELPERDIR .. "/use_fasm.lua") tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir()) 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("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" .. str_build .. 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" .. 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"}}, "symbols %f %o", "kernel.mnt.sym")
--tup.rule({"kernel.mnt.fas", extra_inputs = {"kernel.mnt"}}, "listing %f %o", "kernel.mnt.lst") --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 " .. 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 -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 .. " -dpretest_build=1 -ddebug_com_base=0xe9", "kernel.mnt.pretest")

View File

@@ -29,35 +29,41 @@ macro line_space {
} }
d80x25_top: d80x25_top:
line_full_top line_full_top
if __REV__ > 0 ; draw seven digits of the git hash
__x = BUILD_CMTID
if __x > 0
__x = __x SHR 4
cur_line_pos = 75 cur_line_pos = 75
store byte ' ' at d80x25_top+cur_line_pos+1 store byte ' ' at d80x25_top+cur_line_pos+1
rev_var = __REV__ repeat 7
while rev_var > 0 digit = __x AND 0xf
store byte rev_var mod 10 + '0' at d80x25_top+cur_line_pos 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 cur_line_pos = cur_line_pos - 1
rev_var = rev_var / 10 __x = __x SHR 4
end while end repeat
store byte ' ' at d80x25_top+cur_line_pos store byte ' ' at d80x25_top+cur_line_pos
store dword ' SVN' at d80x25_top+cur_line_pos-4 store dword ' GIT' at d80x25_top+cur_line_pos-4
end if end if
space_msg: space_msg:
line_space line_space
verstr: verstr:
; line_space
; version string ; version string
db 186,32 db 186,32
repeat 78 repeat 78
load a byte from kernel_header.signature+%-1 load a byte from kernel_header.signature+%-1
if a = 13 if a = 13
break break
end if end if
db a db a
end repeat end repeat
repeat 78 - ($-verstr) repeat 78 - ($-verstr)
db ' ' db ' '
end repeat end repeat
db 32,186 db 32,186
line_half line_half
d80x25_top_num = 4 d80x25_top_num = 4

View File

@@ -24,9 +24,38 @@ org 0
; struct kernel_header ; struct kernel_header
jmp start_of_code ; jump jmp start_of_code ; jump
db 'KolibriOS ' ; signature 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 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/bootstr.inc" ; language-independent boot messages
include "boot/preboot.inc" include "boot/preboot.inc"

View File

@@ -227,6 +227,33 @@ struct kernel_header
; KERNEL.MNT file can be booted on BIOS as well as on UEFI. ; KERNEL.MNT file can be booted on BIOS as well as on UEFI.
ends 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 DRIVE_DATA_SIZE = 16
OS_BASE = 0x80000000 OS_BASE = 0x80000000

View File

@@ -970,13 +970,21 @@ picture rb Xsize*Ysize*4 ; 32 бита
размером 16 байт для будущей совместимости, в будущем могут быть размером 16 байт для будущей совместимости, в будущем могут быть
добавлены некоторые поля. добавлены некоторые поля.
Структура буфера: Структура буфера:
db a,b,c,d для версии a.b.c.d db a,b,c,d для версии ОС a.b.c.d
db 0: зарезервировано db отладочная метка, для релиза всегда 0, иначе любой символ ASCII
dd REV - номер svn-ревизии ядра db младшая часть ABI ядра
Для ядра Kolibri 0.7.7.0+: dw старшая часть ABI ядра
dd идентификатор коммита, например краткий git-хэш в бинарном виде
dw зарезервировано
dw количество коммитов с момента последнего релиза
Пример структуры для ядра Kolibri 0.7.7.0+:
db 0,7,7,0 db 0,7,7,0
db 0 db 0
dd 1675 db 0
dw 40
dd 0xf26d5b28
dw 0
dw 1675
---------------------- Константы для регистров: ---------------------- ---------------------- Константы для регистров: ----------------------
eax - SF_SYSTEM (18) eax - SF_SYSTEM (18)

View File

@@ -962,13 +962,21 @@ Remarks:
16 byte buffer for the future compatibility, in the future 16 byte buffer for the future compatibility, in the future
some fields can be added. some fields can be added.
Structure of the buffer: Structure of the buffer:
db a,b,c,d for version a.b.c.d db a,b,c,d for os version a.b.c.d
db 0: reserved db debug tag, 0 for release, any ASCII char otherwise
dd REV - kernel SVN revision number db kernel ABI minor
For Kolibri 0.7.7.0+ kernel: 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,7,7,0
db 0 db 0
dd 1675 db 0
dw 40
dd 0xf26d5b28
dw 0
dw 1675
---------------------- Constants for registers: ---------------------- ---------------------- Constants for registers: ----------------------
eax - SF_SYSTEM (18) eax - SF_SYSTEM (18)

View File

@@ -30,6 +30,8 @@ format binary as "mnt"
include 'macros.inc' include 'macros.inc'
include 'struct.inc' include 'struct.inc'
ABI_MAJOR = 0x28
ABI_MINOR = 0
USE_COM_IRQ = 1 ; make irq 3 and irq 4 available for PCI devices 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 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] mov eax, version_inf.osrel
DEBUGF 1, "K : kernel SVN r%d\n", eax 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 ; 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 sysfn_getversion: ; 18.13 = get kernel ID and version
; if given memory address belongs to kernel then error ; 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 jnz .addr_error
mov edi, ecx mov edi, ecx
mov esi, version_inf mov esi, version_inf
mov ecx, version_inf.size mov ecx, sizeof.kernel_version
rep movsb rep movsb
ret ret
.addr_error: ; if given memory address is illegal .addr_error: ; if given memory address is illegal
@@ -2287,11 +2312,18 @@ sound_flag db 0
endg endg
iglobal iglobal
version_inf: if ~ definite BUILD_DBGTAG
db 0,7,7,0 ; FIXME: Get distribution version from git tag BUILD_DBGTAG = 0
db 0 end if
.rev dd __REV__ if ~ definite BUILD_CMTID
.size = $ - version_inf 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 endg
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
align 4 align 4
@@ -4457,8 +4489,6 @@ end if
include "data32.inc" include "data32.inc"
__REV__ = __REV
if ~ lang eq es_ES if ~ lang eq es_ES
diff16 "end of kernel code",0,$ diff16 "end of kernel code",0,$
end if end if

View File

@@ -5,16 +5,6 @@
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
__REV = 0
macro $Revision a {
match =: Num =$,a \{
if __REV < Num
__REV = Num
end if
\}
}
;// mike.dld, 2006-29-01 [ ;// mike.dld, 2006-29-01 [
; macros definition ; macros definition