将30天中txt文件的ascii字体像素数据转为binary插入elf格式的kernel中
将30天中的txt文件ascii字体像素数据转化为(8bits*16)byte array放入elf文件中
背景: 目前在基于elephant os上将30天的图形界面加入上来,但是30天的编译链是书作者写的,此方式是用gcc等实现,此处是处理256个ascii字体文件加入到kernel.bin中
将开头的几个日文删除,发现有个特点是. 和 *
只代表0和1,那么只需要统计这2个字符而不管其它的字符,自己来记住对应的字体index,生成纯2进制文本对应8bits*16字体像素.
将hankaku.txt转化为二进制文件
1 |
|
用xxd 3.in
通过16进制查看生成的二进制文件,发现对应上了每个字体的16字节,
接下来将 binary 文件制作成i386下的.o 使得ld链接到kernel.bin,这样就能使用全局符号来访问字体资源
查看kernel.bin其中一个.o的文件的架构格式信息
则使用objcopy -I binary -O elf32-i386 -B i386 1.in font_binary.o
命令就可以制作成x86下的.o文件了,现在成功了90%
在makefile中作为.o添加一条target,然后链接进入kernel.bin
make后查看kernel.bin的符号表是否生成了对应的全局符号
左边是这3个符号的值,
c00091c0
表示二进制文件(font字体的像素字节)生成到虚拟地址为0xc00091c0
c000a1c0
结束的虚拟地址
0x1000
二进制文件的大小(正好是16*256 = 4096)
用代码测试0xc000a1c0
处开始的值
以前是将这3个符号声明为char 类型,有点问题,但是我发现声明为xxx []比较好
查看的是第0x12和第0x13个字节的值
原本的二进制文件:
bochs中运行结果(没有在图形下debug是还没做图形下的debug_print功能):
完全一致,将二进制字库文件插入kernel.bin中成功!
使用新增的ascii字体的效果
代码目录github
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!