Re: Kernel in D
On 5/31/14, 7:57, ed wrote: On Saturday, 31 May 2014 at 07:28:32 UTC, Mineko wrote: So, I've gotten interested in kernel programming in D.. And as much as I like C/C++, I wanna try innovating, I'm aware that phobos/gc and any OS-specific issues are going to be a problem, but I'm willing to implement them into the kernel itself. So, I guess what I'm asking is this: What should I look out for, what should I avoid, and what should I use to my advantage? I'm not expecting this kernel to be Linux right off the bat, but I would like to see how far D can go with this. Any ideas? :P I wrote a little kernel a while back that all started when I read this wiki page: http://wiki.osdev.org/D_Bare_Bones You may be beyond this already as it is pretty basic stuff...still it's good if you're just learning like I am. There are some articles that helped me fix the 64-bit bootloader issues I was having as well. Cheers, ed Just a warning, there are a few bugs on that wiki page. Nothing major, just don't expect every example to work out of the box. (unless it has been updated in the last year of course). I thought about editing it, but I lost interest in my project before I got around to it. =C I've long since forgotten what issues I encountered though...
Re: Kernel in D
On 6/5/14, 6:05, 1100110 wrote: On 5/31/14, 7:57, ed wrote: On Saturday, 31 May 2014 at 07:28:32 UTC, Mineko wrote: So, I've gotten interested in kernel programming in D.. And as much as I like C/C++, I wanna try innovating, I'm aware that phobos/gc and any OS-specific issues are going to be a problem, but I'm willing to implement them into the kernel itself. So, I guess what I'm asking is this: What should I look out for, what should I avoid, and what should I use to my advantage? I'm not expecting this kernel to be Linux right off the bat, but I would like to see how far D can go with this. Any ideas? :P I wrote a little kernel a while back that all started when I read this wiki page: http://wiki.osdev.org/D_Bare_Bones You may be beyond this already as it is pretty basic stuff...still it's good if you're just learning like I am. There are some articles that helped me fix the 64-bit bootloader issues I was having as well. Cheers, ed Just a warning, there are a few bugs on that wiki page. Nothing major, just don't expect every example to work out of the box. (unless it has been updated in the last year of course). I thought about editing it, but I lost interest in my project before I got around to it. =C I've long since forgotten what issues I encountered though... I should also clarify that I'm just a novice and really just wanted insight into how it all worked. So anyone more experienced might simply know something that I did not.
Re: Kernel in D
On Thursday, 5 June 2014 at 11:07:54 UTC, 1100110 wrote: On 6/5/14, 6:05, 1100110 wrote: On 5/31/14, 7:57, ed wrote: On Saturday, 31 May 2014 at 07:28:32 UTC, Mineko wrote: So, I've gotten interested in kernel programming in D.. And as much as I like C/C++, I wanna try innovating, I'm aware that phobos/gc and any OS-specific issues are going to be a problem, but I'm willing to implement them into the kernel itself. So, I guess what I'm asking is this: What should I look out for, what should I avoid, and what should I use to my advantage? I'm not expecting this kernel to be Linux right off the bat, but I would like to see how far D can go with this. Any ideas? :P I wrote a little kernel a while back that all started when I read this wiki page: http://wiki.osdev.org/D_Bare_Bones You may be beyond this already as it is pretty basic stuff...still it's good if you're just learning like I am. There are some articles that helped me fix the 64-bit bootloader issues I was having as well. Cheers, ed Just a warning, there are a few bugs on that wiki page. Nothing major, just don't expect every example to work out of the box. (unless it has been updated in the last year of course). I thought about editing it, but I lost interest in my project before I got around to it. =C I've long since forgotten what issues I encountered though... I should also clarify that I'm just a novice and really just wanted insight into how it all worked. So anyone more experienced might simply know something that I did not. Yes I remember now I also had some issues but I've forgotten what what were exactly ... it was a while ago. I put it down to the fact I was using DMD not GDC and trying to boot from GRUB. But it could be more than that. Cheers, ed
Re: Kernel in D
On Saturday, 31 May 2014 at 23:27:45 UTC, Qox wrote: On Saturday, 31 May 2014 at 07:57:18 UTC, Kagamin wrote: http://www.xomb.org/ ? seems to be outdated, but its another OS written in D. It's dead for only a year, the developer have probably graduated.
Kernel in D
So, I've gotten interested in kernel programming in D.. And as much as I like C/C++, I wanna try innovating, I'm aware that phobos/gc and any OS-specific issues are going to be a problem, but I'm willing to implement them into the kernel itself. So, I guess what I'm asking is this: What should I look out for, what should I avoid, and what should I use to my advantage? I'm not expecting this kernel to be Linux right off the bat, but I would like to see how far D can go with this. Any ideas? :P
Re: Kernel in D
http://www.xomb.org/ ?
Re: Kernel in D
On Saturday, 31 May 2014 at 07:28:32 UTC, Mineko wrote: Any ideas? :P Buy my book, chapter 11 talks about it a little to get you started :P http://www.packtpub.com/discover-advantages-of-programming-in-d-cookbook/book The summary of my approach there is: 1) Use a regular linux compiler and a custom linker script to make an ELF executable, I wouldn't worry about making a cross compiler or anything fancy like that. 2) Use GRUB or qemu -kernel to boot that executable. No need to write your own bootloader. 3) Compile without the runtime, instead using a minimal object.d, here's a fairly simple one for example: http://arsdnet.net/dcode/bare/object.d or a more complete one can be found in here: http://arsdnet.net/dcode/minimal.zip 4) Add back features from teh real druntime as needed, but I say avoid those that are too hard to do memory management manually (so like just leave array concatenation unimplemented, instead write a regular struct that owns its own memory and has append methods and use it) 5) Love inline asm and naked functions for interrupt handlers 6) Pay attention to struct alignment (also see chapter 7 of my book if you decide to go that route) when defining hardware layouts! 7) Don't try to use TLS variables, always use __gshared on module level or static variables cuz tls won't actually work. That should get you started to play around!
Re: Kernel in D
On Saturday, 31 May 2014 at 07:28:32 UTC, Mineko wrote: So, I've gotten interested in kernel programming in D.. And as much as I like C/C++, I wanna try innovating, I'm aware that phobos/gc and any OS-specific issues are going to be a problem, but I'm willing to implement them into the kernel itself. So, I guess what I'm asking is this: What should I look out for, what should I avoid, and what should I use to my advantage? I'm not expecting this kernel to be Linux right off the bat, but I would like to see how far D can go with this. Any ideas? :P I wrote a little kernel a while back that all started when I read this wiki page: http://wiki.osdev.org/D_Bare_Bones You may be beyond this already as it is pretty basic stuff...still it's good if you're just learning like I am. There are some articles that helped me fix the 64-bit bootloader issues I was having as well. Cheers, ed
Re: Kernel in D
You should definitly use templating and CTFE for your advantage. For example you could use the (compile time) component based design to design (heap) allocators after a at cmpile time known configuration. The possibilities of templating and compile time code gen are enormous. Instead of using real OOP classes you should use the object bound functions (you have functions which take as a first argument the struct or a ref of a struct, just look it up in the documentation for the functions). This allows to use OOP without writing a GC. Furthermore, all kind of array ops need GC. If you want exception handling it could be a small problem. Even a simple scope expression scope(exit) foo(); uses exception handling in the background. It could be possible to diassemble the *.obj/*.o file, change all entries which use __except_list to something else. Basically you need to rewrite *** [fs: __except_list] to something else which doesn't use fs, maybe you can get away with using a global scratch memory, i've not done any experiments tho. Inovation with D is allways a good thing :) --- For the building of the kernel i used gdc, together with a ld linkscript and some other magic (a python script which grabs some stuff from a disambled file or modified something, dunno). Today gdc is outdated, so i would choose ldc or dmd (ldc for better speed, but its not that important in the beginning).
Re: Kernel in D
On Saturday, 31 May 2014 at 07:57:18 UTC, Kagamin wrote: http://www.xomb.org/ ? seems to be outdated, but its another OS written in D.
Re: Kernel in D
On Saturday, 31 May 2014 at 22:54:48 UTC, Qox wrote: scope(exit) foo(); uses exception handling in the background. That just works with dmd even in the bare metal environmnet. Throwing an exception needs library support with dmd but you can copy/paste it from druntime - I did that in my minimal.zip.