Driver in Freepascal - Target NativeNT

Freepascal Driver - Target NativeNT

Based on ‘WRITE ONCE COMPILE ANYWHERE’ principle, Freepascal has the ability to make DLLs, Console and GUI Applications for multiple platforms followed by support for ARM Processors, etc. A very interesting feature that Freepascal (may) will have in the near future is the ability to compile Kernel Mode and or User Mode Device Drivers. Although the support is unavailable in the current stable release, we might one day in the near future be writing our own Device Drivers in Freepascal wth a built in support in some new future release of Freepascal, that is for now not possible with the Current Stable Release of Freepascal. The Official Page related to this new feature is: Target-NativeNT in Freepascal Wiki.  
This post was created because we saw that many people were having problem/s building the NativeNT Freepascal Package provided as the Trunk Build.
If you just want the Compiled Tools and don’t want to know the actual build process, scroll down to the end of this page and you will find a RAR Package (password: nativent). You will find the Kernel Mode RTL (Units), NativeNT ppc386 (renamed to ppc) and NativeNT fpcmake. With those, you can simply extract and immediately start building your own Kernel Mode Driver in FreePascal. The Details are provided within the Package in the ReadME File along with a Sample Driver. If you have Delphi installed on your PC, you can use DDDK (Delphi Driver Development Kit).
With that being said, let’s start.
The real problem starts for the beginners, completely new to the GnuWIN32 MAKE Utility. The GnuWIN32 MAKE Utility simply reads the MakeFile in the Current Directory and starts the build process without giving the user the pain of doing it all manually. Now, I already have Lazarus installed in my Computer which means I don’t have to install the GnuWIN32 MAKE Utility additionally. The Lazarus Package comes with it (%LAZARUS_DIR%\fpc\2.4.4\bin\i386-win32\make.exe).

Goto the Freepascal Development Page

Download FPCBUILD.ZIP ( >= 60 MB )
Don’t download the fpc.zip ( 31 MB ), it will only emit error(s) and doesn't contain the files required for NativeNT Build Process.

Extract the ZIP to say drive D: and you will have a folder D:\fpcbuild



Okay, so below is my MAKE.CMD to enter the required Directories and call the required MAKE.EXE:
@ECHO OFF
d:
ECHO { NAVIGATING TO FPCBUILD DIR  }
ECHO { CALLING LAZARUS_MAKE.EXE    }
cd fpcbuild\fpcsrc\compiler
d:\lazarus\fpc\2.4.4\bin\i386-win32\make

ECHO { NAVIGATING TO UTILS_FPCM    }
ECHO { CALLING LAZARUS_MAKE.EXE    }
cd..\utils\fpcm
d:\lazarus\fpc\2.4.4\bin\i386-win32\make

ECHO { COMPILING FREEPASCAL RTL    }
cd d:\fpcbuild\fpcsrc\rtl
d:\lazarus\fpc\2.4.4\bin\i386-win32\make FPC=d:\fpcbuild\fpcsrc\compiler\ppc386.exe OS_TARGET=nativent OPT=”-dKMODE”

ECHO { #EXITING COMMAND_PROMPT#    }
PAUSE

Now, lets understand it part by part:
@ECHO OFF
d:
ECHO { NAVIGATING TO FPCBUILD DIR  }
ECHO { CALLING LAZARUS_MAKE.EXE    }
cd fpcbuild\fpcsrc\compiler
d:\lazarus\fpc\2.4.4\bin\i386-win32\make
1.       Enters Drive D:
2.       Goes to the Folder fpcbuild\fpcsrc\compiler
3.       Calls GnuWIN32 MAKE Utility residing in %LAZARUS_DIR%\fpc\2.4.4\bin\i386-win32\make.exe (%LAZARUS_DIR% in my case is D:\Lazarus).
If you are aware, there is a MakeFile in fpcbuild\fpcsrc\compiler\ which comes with the FPCBUILD.ZIP. The MAKE.EXE reads the MakeFile and starts the build Process of the Compiler.
The Same goes for the FPCMAKE.EXE in (..\utils\fpcm\). 
Now, building the RTL, we need to choose between UserMode and KernelMode. I will choose KernelMode RTL Compilation as it runs under RING0.
ECHO { COMPILING FREEPASCAL RTL    }
cd d:\fpcbuild\fpcsrc\rtl
d:\lazarus\fpc\2.4.4\bin\i386-win32\make FPC=d:\fpcbuild\fpcsrc\compiler\ppc386.exe OS_TARGET=nativent OPT=”-dKMODE”
The Make is the path of GnuWIN32 Make Utility in Lazarus Directory, FPC=YOUR_NEW_PPC386.EXE, OS_TARGET=nativent (otherwise the i386-win32 RTL would be produced) and OPT=”-dKMODE” is the switch that makes the difference between UserMode RTL and KernelMode RTL. You cannot produce both at once.

As you can see, the build process is quite simple. It Compiles fine with few warnings here and there. But at last, you will get the ppc386.exe(2.16MB) in  \fpcbuild\fpcsrc\compiler\ppc386.exe, fpcmake.exe in \fpcbuild\fpcsrc\utils\rtl\units\i386-nativent.
Found this post useful ? If so, Click +1 and recommend this site on Google

No comments:

Post a Comment