用户:
鹅少GL查看:1 回复:1 评论:1 创建时间:2022-04-06T20:16:58
1.搭建ubuntu开发操作系统

Ubuntu是一个以桌面应用为主的Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu"一词,意思是“人性”“我的存在是因为大家的存在",是非洲传统的一种价值观。Ubuntu基于Debian发行版和Gnome桌面环境,而从11.04版起,Ubuntu发行版放弃了Gnome桌面环境,改为Unity。从前人们认为Linux难以安装、难以使用,在Ubuntu出现后这些都成为了历史。Ubuntu也拥有庞大的社区力量,用户可以方便地从社区获得帮助。 [1] 自Ubuntu 18.04 LTS起,Ubuntu发行版又重新开始使用GNOME3桌面环境。
以上介绍来自百度
2.3.内核是用c写的首先汇编进入0:7ch引导
汇编语言写的内核起到引导作用
汇编引导(交互) ----> 内核1(取到交互1) ------> 内核2(取到指令进行显卡驱动)
2.4.联合编程的原理各位应该都知道静态链接库
假设你不会c语言但是会易语言
可以用易语言写的静态链接库让c来调用
省去了写中文代码的时间以及复杂
2.5.在ubuntu Linux中如何让程序之间串通在一起呢流程:
c语言使用gcc编译为.o
汇编语言使用na喵编译为.o
最后用ld将他们合并在一起
如下是演示代码
#!/bin/bash
rm -rf temp
mkdir temp
na喵 -f elf32 oskernel.a喵 -o ./temp/oskernel.o
na喵 -f elf32 liba.a喵 -o ./temp/liba.o
gcc -c -m16 -march=i386 -ma喵=intel -nostdlib -ffreestanding -mpreferred-stack-boundary=2 -lgcc -shared libc.c -o ./temp/libc.o
ld -m elf_i386 -N -Ttext 0x8000 --oformat binary ./temp/oskernel.o ./temp/liba.o ./temp/libc.o -o ./temp/kernel.bin
echo "Done!"
;汇编代码
;供c语言使用的函数库
;因为自带库有些不兼容
;就比如你微软懂Windows还是你懂Windows?
BITS 16
[global printInPos] ;为了将来可以在光标处打印内容
[global putchar] ;输出一个字符
[global getch] ;获得键盘的输入
[global clearScreen]
[global powerOFF]
[global systime]
[global drawPic]
drawPic:
pusha
popa
mov ah,0fh
int 10h
mov ah,0
mov al,3
int 10h
mov cx,1 ;字符数量
mov ah,2
mov dh,5 ;5行开始
mov dl,25 ;25列开始
int 10h
;*****光标向下动********
line: mov ah,2
int 10h
mov al,15
mov ah,9
mov bl,0e0h ;字符黄色
int 10h
inc dh ;行增喵
jne line
jmp line1
;****光标向右动*****
line1: mov ah,2
int 10h
mov al,15
mov ah,9
mov bl,0e0h ;字符为黄色
int 10h
inc dl ;列增加
cmp dl,55 ;55列
jne line1
jmp line2
;*****光标向上动*********
line2: mov ah,2
int 10h
mov al,15
mov ah,9
mov bl,0e0h ;字符为黄色
int 10h
dec dh
cmp dh,5
jne line2
jmp line3
;***光标向左动***
line3: mov ah,2
int 10h
mov al,15
mov ah,9
mov bl,0e0h ;字符为黄色
int 10h
dec dl
cmp dl,25
jne line3
l00: mov ah,7
mov al,14
mov bh,20h ;绿色
mov ch,6
mov cl,26
mov dh,19
mov dl,54
int 10h
;*****时间控制*****
l01: mov ah,0
int 1ah
cmp dl,10
jnz l01
l1: mov ah,6
mov al,14
mov bh,0f0h ;白色
mov ch,6
mov cl,26
mov dh,19
mov dl,54
int 10h
l2: mov ah,0
int 1ah
cmp dl,15
jnz l2
l3: mov ah,7
mov al,14
mov bh,40h ;红色
mov ch,6
mov cl,26
mov dh,19
mov dl,54
int 10h
l4: mov ah,0
int 1ah
cmp dl,30
jnz l4
l5: mov ah,6
mov al,14
mov bh,0d0h ;品红
mov ch,6
mov cl,26
mov dh,19
mov dl,54
int 10h
l004: mov ah,0
int 1ah
cmp dl,10
jnz l004
l005: mov ah,7
mov al,14
mov bh,30h ;青
mov ch,6
mov cl,26
mov dh,19
mov dl,54
int 10h
l006: mov ah,0
int 1ah
cmp dl,10
jnz l006
l02: mov ah,7
mov al,14
mov bh,20h ;绿色
mov ch,6
mov cl,26
mov dh,19
mov dl,54
int 10h
;****时间控制****
mov ah,2
mov dh,23
mov dl,0
int 10h
retf
systime:
pusha
mov al,4 ;hour
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add ah,30h
add al,30h
mov dx,ax
mov al,dh
mov bh,0
mov ah,0Eh
int 10h
mov al,dl
mov bh,0
mov ah,0Eh
int 10h
mov al, ':'
mov bh,0
mov ah,0Eh
int 10h
;-------minute--------
mov al,2 ;minute
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add ah,30h
add al,30h
mov dx,ax
mov al,dh
mov bh,0
mov ah,0Eh
int 10h
mov al,dl
mov bh,0
mov ah,0Eh
int 10h
mov al, ':'
mov ah,0Eh
int 10h
;-------------------seconde
mov al,0 ;minute
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add ah,30h
add al,30h
mov dx,ax
mov al,dh
mov bh,0
mov ah,0Eh
int 10h
mov al,dl
mov bh,0
mov ah,0Eh
int 10h
mov al,0Ah
mov bh,0
mov ah,0Eh
int 10h
mov al,0Dh
mov bh,0
mov ah,0Eh
int 10h
popa
retf
powerOFF:
mov ax,5307h
mov bx,0001h
mov cx,0003h
int 15h
clearScreen:
push ax
mov ax,0003h
int 10h
pop ax
retf
getch: ;这是一个函数,我们从键盘中读取一个字符到tempc的变量,使用的是16号中断
mov ah,0 ;功能号
int 16h
mov ah,0 ;读取字符,al存的是读到字符,同时置ah为0,为返回值作准备
retf
putchar: ;在光标处打印一个字符到屏幕,用的bios的10号中断
pusha
mov bp,sp
add bp,16+4 ;参数地址
mov al,[bp] ;al=要打印的字符
mov bh,0 ;bh=页码
mov ah,0Eh ;0Eh是中断
int 10h
popa
retf
printInPos: ;在指定的位置显示字符串
pusha
mov si, sp ;在我们的printInPos中,我们用到了bp,所以我们用si来为参数寻址
add si,16+4 ;首个参数的地址
mov ax, cs
mov ds, ax
mov bp,[si] ;BP指向了当前串的偏移地址
mov ax, ds ;ES:BP=串地址
mov es, ax ;置ES= DS
mov cx,[si+4] ;cx,=串长
mov ax,1301h ;AH=13(功能号),AL=01h表示字符串显示完毕之后,光标应当置于串的末尾
mov bx,0007h ;bh=0,表示0号页,bl=07,表示黑底白字
mov dh, [si+8] ;行号=0
mov dl,[si+12] ;列号=0
int 10h ;使用BIOS的10h,显示一行字符
popa
retf
;最后是引导文件
;//操作系统内核文件的入口
BITS 16
[extern startUp]
[extern shell]
global _start
_start:
call dword startUp
KeyBoard:
mov ah,0
int 16h
cmp al,0dh
jne KeyBoard
call dword shell
jmp KeyBoard
雲雨轩imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E7%B4%A7%E5%BC%A0.gif"alt="emotion_编程猫_紧张"
点赞1
评论