{"id":14667,"date":"2026-10-05T01:00:00","date_gmt":"2026-10-05T05:00:00","guid":{"rendered":"https:\/\/www.both.org\/?p=14667"},"modified":"2026-10-03T13:53:08","modified_gmt":"2026-10-03T17:53:08","slug":"booting-new-freedos-kernels","status":"publish","type":"post","link":"https:\/\/www.both.org\/?p=14667","title":{"rendered":"Booting new FreeDOS kernels"},"content":{"rendered":"<div class=\"pld-like-dislike-wrap pld-template-1\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"\" data-post-id=\"14667\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                        <i class=\"fas fa-thumbs-up\"><\/i>\r\n                <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">    <\/span>\r\n<\/div><\/div>\n<p class=\"wp-block-paragraph\">In late June this year, FreeDOS released an updated kernel. Thanks to the hard work of our kernel developers, maintained by Jeremy Davis, the new kernel includes a ton of new work aimed at supporting Windows 3.1 in &#8220;386 Enhanced&#8221; mode. FreeDOS has been able to run Windows 3.1 in &#8220;Standard&#8221; mode for years, but &#8220;Enhanced&#8221; mode requires supporting a lot of compatibility &#8220;edge&#8221; cases for Windows 3.1. It is no small feat to add this support.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Since that time, we&#8217;ve included this updated kernel in every monthly <a href=\"https:\/\/download.freedos.org\/test\/\">test release<\/a> starting with FreeDOS T2607 (July 2026). If you install the test release, you&#8217;ll automatically install the new kernel. Please help us to test the new kernel; the test release will become the next FreeDOS distribution.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FreeDOS 1.4 (kernel version 2043)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">But what if you&#8217;re already running FreeDOS 1.4 and don&#8217;t want to re-install <em>just to try out the new kernel<\/em>? Installing a new FreeDOS kernel is actually quite easy. Let&#8217;s demonstrate by upgrading FreeDOS 1.4 to use the new kernel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For this demonstration, I started with a tiny QEMU disk image. I don&#8217;t need to install all of FreeDOS 1.4 just to test this, so a few megabytes would be enough. I created a virtual QCOW2 disk image that was 10 megabytes in size:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ qemu-img create -f qcow2 tiny.q 10M\nFormatting 'tiny.q', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10485760 lazy_refcounts=off refcount_bits=16<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I already downloaded the FreeDOS 1.4 installation media as <strong>FD14LIVE.iso<\/strong> in a <strong>1.4<\/strong> directory. I booted QEMU with the LiveCD as the &#8220;CD-ROM&#8221; image, and the <strong>tiny.q<\/strong> disk image as the &#8220;C:&#8221; drive:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ qemu-system-i386 -cdrom 1.4\/FD14LIVE.iso -hda tiny.q<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The LiveCD boots into a DOS prompt by default, so I used the <strong>fdisk<\/strong> command to verify that the &#8220;C:&#8221; drive was empty, then created a new partition on it. You can use <strong>fdisk<\/strong> either as an interactive program or as a command line tool; I used it from the command line:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>D:\\&gt;fdisk 1 \/info\n\nCurrent fixed disk drive: 1   20160 sectors, geometry 20\/016\/63\n\nNo partitions defined.\n\nLargest continuous free space for primary partition = 9 MBytes\n\nD:\\&gt;fdisk 1 \/auto \n\nD:\\&gt;fdisk 1 \/info\n\nCurrent fixed disk drive: 1   20160 sectors, geometry 20\/016\/63\n\nPartition   Status   Mbytes   System           Usage    Start CHS       End CHS\n C: 1   1      A          9   FAT-12            100%     0\/001\/01     19\/015\/63\n\nLargest continuous free space for primary partition = 0 MBytes<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Like any DOS, the FreeDOS kernel only reads the disk partition information when it boots up. If you add or delete partitions on the disk, you need to reboot before FreeDOS will &#8220;see&#8221; them. After rebooting the system using the <strong>reboot<\/strong> command (which is really an alias to <strong>fdapm<\/strong> with the <code>\/warmboot<\/code> command line option) I was back at DOS prompt and could create a DOS filesystem on the &#8220;C:&#8221; drive using the <strong>format<\/strong> command. To make the disk bootable with a kernel and a copy of the <strong>command.com<\/strong> shell, add the <code>\/S<\/code> (&#8220;system&#8221;) option to the <strong>format<\/strong> command line.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>D:\\&gt;format C: \/S\n DRIVE C: WILL BE LOST! PLEASE CONFIRM!\nProceed with Format (YES\/NO)?YES\n##  Boot sector unreadable, disk not yet formatted\n Disk size: 10 Mbytes, FAT12. ***\nCannot find existing format - not saving UNFORMAT data.\nPlease enter volume label (max. 11 chars): TINY \n QuickFormatting (only flushing metadata)\n Warning: Resets bad cluster marks if any.\n Preparing FAT area...\n100 percent completed.\n\nQuickFormat complete.\n\nRunning SYS in a shell: sys C:\nSystem transferred.\n\n\n    10,289,664  bytes total disk space (disk size)\n    10,264,576  bytes available on disk (free clusters)\n\n         4,096  bytes in each allocation unit.\n         2,506 allocation units on disk.\n\n Volume Serial Number is 2021-1824<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To make it easier to shut down the virtual machine later, I also copied the <strong>fdapm<\/strong> command to the new virtual disk. When I was done, my new &#8220;C:&#8221; drive had a copy of the kernel as <code>KERNEL.SYS<\/code>, the command shell as <code>COMMAND.COM<\/code>, and the Advanced Power Management command as <code>FDAPM.COM<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>D:\\&gt;copy \\freedos\\bin\\FDAPM.COM C:\n\\freedos\\bin\\FDAPM.COM =&gt;&gt; C:FDAPM.COM\n\nD:\\&gt;dir C: \/w\n Volume in drive C is TINY\n Volume Serial Number is 2021-1824\n Directory of C:\\\n\nCOMMAND.COM    FDAPM.COM      KERNEL.SYS\n         3 file(s)        141,462 bytes\n         0 dir(s)      10,117,120 bytes free<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Having installed a <em>minimal<\/em> version of &#8220;FreeDOS 1.4,&#8221; I could shut down using <strong>fdapm<\/strong> one more time:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>D:\\&gt;fdapm \/poweroff<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If you boot back into the &#8220;tiny&#8221; virtual disk, you can see that the FreeDOS kernel identifies itself as version 2043:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ qemu-system-i386 -hda tiny.q\n\nBooting from Hard Disk...\nFreeDOS kernel 2043 (build 2043 OEM:0xfd) &#91;compiled May 14 2021]\nKernel compatibility 7.10 - WATCOMC - 80386 CPU required - FAT32 support\n\n(C) Copyright 1995-2012 Pasquale J. Villani and The FreeDOS Project.\nAll Rights Reserved. This is free software and comes with ABSOLUTELY NO\nWARRANTY; you can redistribute it and\/or modify it under the terms of the\nGNU General Public License as published by the Free Software Foundation;\neither version 2, or (at your option) any later version.<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Upgrading the kernel (version 2046)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To install the new kernel <em>without reinstalling FreeDOS<\/em>, you can just replace the <code>KERNEL.SYS<\/code> file. It&#8217;s that easy because of how DOS boots up: I&#8217;ll skip over some of the details, but eventually the system starts the FreeDOS <em>boot loader<\/em> which looks for a kernel called <code>KERNEL.SYS<\/code>. If you replace that system file with another one, the boot loader will load the new kernel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s replace the &#8220;FreeDOS 1.4&#8221; kernel with the one from the latest FreeDOS test release (FreeDOS T2610, October 2026). One way to do that is to boot the virtual machine with the FreeDOS T2610 installation media as a separate drive, and copy the kernel to the &#8220;C:&#8221; drive.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Since my &#8220;tiny&#8221; virtual disk doesn&#8217;t have a CD-ROM driver, I couldn&#8217;t use the LiveCD image from the FreeDOS test release\u2014at least, not if I wanted to do the work from the virtual disk. Instead, I downloaded the FreeDOS T2610 &#8220;Full USB&#8221; image as <code>T2610FULL.img<\/code> and booted with that as the &#8220;D:&#8221; drive. I used the <code>tiny.q<\/code> virtual disk image as the &#8220;C:&#8221; drive:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ qemu-system-i386 -hda tiny.q -hdb T2610\/T2610FULL.img<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">By default, the FreeDOS kernel looks for its configuration file as <code>\\FDCONFIG.SYS<\/code>; if it can&#8217;t find that file, it also looks for <code>\\CONFIG.SYS<\/code>. Since I didn&#8217;t create this file on my virtual disk, the FreeDOS kernel assumes some defaults and loads <code>\\COMMAND.COM<\/code> as the command shell. The shell looks for <code>\\AUTOEXEC.BAT<\/code> to set the initial environment; but this doesn&#8217;t exist either so the command shell prompts for the date and time, then puts me into a shell prompt where I can type commands:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Booting from Hard Disk...\nFreeDOS kernel 2043 (build 2043 OEM:0xfd) &#91;compiled May 14 2021]\nKernel compatibility 7.10 - WATCOMC - 80386 CPU required - FAT32 support\n\n(C) Copyright 1995-2012 Pasquale J. Villani and The FreeDOS Project.\nAll Rights Reserved. This is free software and comes with ABSOLUTELY NO\nWARRANTY; you can redistribute it and\/or modify it under the terms of the\nGNU General Public License as published by the Free Software Foundation;\neither version 2, or (at your option) any later version.\nC: HD1, Pri&#91; 1], CHS=    0-1-1, start=     0 MB, size=     9 MB\nD: HD2, Pri&#91; 1], CHS=    0-1-1, start=     0 MB, size=  1023 MB\n\nFreeCom version 0.86 - WATCOMC - XMS_Swap &#91;Dec 30 2024 22:10:51]\nCurrent date is Sat 10-03-2026\nEnter new date (mm-dd-&#91;cc]yy): \nCurrent time is  5:12:22 pm\nEnter new time:\nC:\\&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I first made a backup of the <code>KERNEL.SYS<\/code> kernel file, then copied the new kernel from the &#8220;D:&#8221; drive to the &#8220;C:&#8221; drive. You can do this with the shell&#8217;s built-in <strong>copy<\/strong> command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>C:\\&gt;copy kernel.sys kernel.000\nkernel.sys =&gt;&gt; kernel.000\n\nC:\\&gt;copy D:\\kernel.sys kernel.sys\nOverwrite 'kernel.sys' (Yes\/No\/All\/Quit) ? y\nD:\\kernel.sys =&gt;&gt; kernel.sys<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s it! I now have a backup copy of the &#8220;old&#8221; kernel as <code>KERNEL.000<\/code> and the &#8220;new&#8221; kernel is <code>KERNEL.SYS<\/code>. You can see that the files are different using the <strong>dir<\/strong> command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>C:\\&gt;dir kernel.*\n Volume in drive C is TINY\n Volume Serial Number is 2021-1824\n Directory of C:\\\n\nKERNEL   SYS        48,889  10-01-26 10:14a\nKERNEL   000        46,256  04-02-25 10:22a\n         2 file(s)         95,145 bytes\n         0 dir(s)      10,067,968 bytes free<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">After I reboot the system using the <strong>fdapm<\/strong> command with the <code>\/warmboot<\/code> option, I can verify the system is now running with the new kernel:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Booting from Hard Disk...\n..............123\nFreeDOS kernel 2046 (build 2046 OEM:0xfd) &#91;compiled Jun 29 2026]\nKernel compatibility 7.10 - WATCOMC - 80386 CPU required - FAT32 support\n\n(C) Copyright 1995-2023 Pasquale J. Villani and The FreeDOS Project.\nAll Rights Reserved. This is free software and comes with ABSOLUTELY NO\nWARRANTY; you can redistribute it and\/or modify it under the terms of the\nGNU General Public License as published by the Free Software Foundation;\neither version 2, or (at your option) any later version.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You can power off the virtual machine using the <strong>fdapm<\/strong> command one more time, with the <code>\/poweroff<\/code> option.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>D:\\>fdapm \/poweroff<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">By design, DOS is a simple operating system. And this simplicity makes DOS a great way to <em>learn how computers work<\/em>. You can see all of the &#8220;moving parts&#8221; in DOS: when the kernel boots up, it looks for its &#8220;config&#8221; file, which sets systemwide parameters. Then the kernel starts the command shell, which uses its own &#8220;bat&#8221; file to set the initial environment. After that, you&#8217;re at the command line and can enter commands and run programs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Please help us test the next version of FreeDOS! Thanks to Jerome Shidel, our distribution manager, we are able to share a new &#8220;test&#8221; distribution every month. These monthly releases collect all new changes, and act as a &#8220;test bed&#8221; to become the next official FreeDOS distribution, and we would like your help to test it. The new &#8220;T2610&#8221; test release includes updates to VSBHDA, SBEMU, Himem, TinyAsm, Blocek, Lynx, FDNPKG16, plus several new translations. Since August, we&#8217;ve also included the updated kernel and other tools. <a href=\"https:\/\/download.freedos.org\/test\/\">Download the test release<\/a> and <a href=\"https:\/\/www.freedos.org\/bugs\/\">let us know<\/a> if you have any problems.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Replacing the FreeDOS kernel is just a simple copy command<\/p>\n","protected":false},"author":33,"featured_media":4599,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","footnotes":"","_members_access_role":[],"_members_access_error":""},"categories":[340,90,89],"tags":[267,223,683],"class_list":["post-14667","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-freedos","category-in-depth","category-system-administration","tag-freedos","tag-in-depth","tag-system-administration"],"modified_by":"David Both","_links":{"self":[{"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts\/14667","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/users\/33"}],"replies":[{"embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=14667"}],"version-history":[{"count":1,"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts\/14667\/revisions"}],"predecessor-version":[{"id":14668,"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts\/14667\/revisions\/14668"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/media\/4599"}],"wp:attachment":[{"href":"https:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=14667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=14667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}