kernel编辑一helloworld!!
来源:互联网 发布:xmlbar软件下载 编辑:程序博客网 时间:2024/06/16 07:31
学习网址来源:https://www.askpure.com/course_MK6ID9VN-61X7K41I-FHS3WLM2-USIK4S6G.html
工具: codeblock,windows10 64位,dd for window(百度下载的,类似Linux下dd功能),vmvare
通过浏览学习网站知道:电脑启动流程:通电——>CPU的CS:IP初始值为:0xffff:0x0000——>找到BIOS系统加载到内存,执行BIOS,执行int 0x19中断——>加载硬盘或者软盘等存储器第一个柱面、第一个磁道、第一个扇区512字节内容,加载到0x7c00位置上——>启动系统内核
第一步,环境部署:codeblocks 在电脑管家上搜索就行,直接安装非常方便,省去很多时间安装编译环境
dd for window https://pan.baidu.com/s/1bo3QCEF 提取:g8qv
vmvare 试用30天 版,不会破解,到日子再说吧
软件设置:
vmvare :(下载安装省略,百度下载的)创建新的虚拟机——》自定义——》其他,剩下默认下一步吧,反正又不是安装正是系统,关闭cd/dvd启动时连接
codeblocks : 创建一个empty project 选择MakeFile方式,完成之后,点击项目添加一个文件boot.s和MakeFile,再右键构建选项,make 命令选项里删 除说有$target
编写boot.s:
#ifndef _BOOT_S_#define _BOOT_S_.code16 .global _start.section .data.section .text_start:movw $0xb800, %axmovw %ax, %esmovw $0x07c0, %axmovw %ax, %dsmovw $_str, %sixorw %di, %di_copy:cmp $0, %ds:(%si)je _loopmovb %ds:(%si), %almovb $0x07, %ahmovw %ax, %es:(%di)addw $1, %siaddw $2, %dijmp _copy_loop:jmp _loop_str:.string "hello World!!!!\0".org 0x1fe, 0x90.word 0xaa55#endif
编写Makefile:注意第七行和第八行,windows 下mingw-make.exe 执行的是createProcess函数,与Linux有所区别所有改为绝对路径,改成你程序所在地
BUILD = buildall:mkdir $(BUILD)gcc boot.s -c -m32 -std=c99 -o $(BUILD)/boot.old -m i386pe -Ttext 0x0 -e _start $(BUILD)/boot.o -o $(BUILD)/bootobjcopy -O binary $(BUILD)/boot $(BUILD)/boot.binF:\tool\dd.exe bs=512 count=2880 if=/dev/zero of=$(BUILD)/boot.imgF:\tool\dd.exe bs=512 count=1 if=$(BUILD)/boot.bin of=$(BUILD)/boot.imgclean:rm -rvf $(BUILD)
最后将生成boot.img放到vmvare中作为主要启动项,新建的虚拟机点击编辑设置,勾掉启动时连接,再然后,选项里并没有软盘启动方式,点击编辑,然后点击添加软盘驱动器
,将刚才生成build目录下boot.img放到箭头所指位置,最后启动虚拟机,
codeblocks文件结构:
- kernel编辑一helloworld!!
- kernel helloworld程序
- 初学Java,HelloWorld(一)
- servlet helloworld(一)
- Hibernate HelloWorld(一)
- Spring MVC (一) - HelloWorld
- SpringMVC入门一:helloWorld
- JNI学习(一)----helloworld
- 初学Java,HelloWorld(一)
- wayland helloworld (一)
- Akka 【一】 HelloWorld
- struts2 学习一 HelloWorld
- 实例一:HelloWorld
- C#(一) helloworld
- xfire基础一: helloworld
- cocos2d-JS (一)HelloWorld
- Hibernate--HelloWorld案例--(一)
- nasm教程一:helloworld
- ESP8266常用脚本命令之一
- Keras classifier分类(二)
- 改变一个list<Map<String,Object>>,并给他重新赋值,不能使用新循环,要使用旧循环
- 算法设计与分析——棋盘覆盖问题
- Android网络连接判断
- kernel编辑一helloworld!!
- Kotlin项目Application registerActivityLifecycleCallbacks 方法踩坑
- DateFormat自带的日期转换格式(很好用的)
- HTTPS详解
- LeetCode 137: Single Number II
- 左潇龙设计模式
- RabbitMQ -- 重新设置
- jquery对象和DOM对象的相互转换
- SAP ECC6.0升级到EHP6 on HANA后,abap中ftp上传需要注意事项