Tiny Core Linux
Tiny Core Base => Micro Core => Topic started by: branpurn on December 08, 2025, 02:53:39 PM
-
I am looking to install Core on a system with 32 MB RAM and an Intel 486.
From the Core media, mc base for no extensions, and mc text for text mode, both kernel panic.
Search discussed the following steps, which seem to be out-of-date (am unable to reproduce in a VM):
Wondering what role grub would play here. Or is that just an example for any bootloader?
I expect syslinux would work, too. I just used grub in my test.
i don't know how can u run tinycore in only 24mb
Yes, Tiny Core requires 48 MB of memory to run it in the usual fashion. Installing it into a 32MB machine is difficult, but possible if you have the technical expertise. Here is a rough sequence of steps:
1) Boot from Micro Core disc.
2) Execute "tce-load -w -i syslinux.tcz"
3) Partition the HDD and make the partition bootable.
4) Format the partition with ext2 and mount it.
5) Run extlinux to install bootloader.
6) Edit syslinux.cfg to add "root=/mnt/hda1" (assuming hda1 is partition)
7) Insert Tiny Core disc and mount CD.
8) Extract tinycore.gz from CD into /mnt/hda1
9) Copy bzImage to HDD.
10) Unmount CD and reboot.
-
Edit: This was supposed to be an edit to OP but I guess I miss-clicked
I see the grub cmdline following worked for someone on 486 in 2018, but in my VM it still kernel panics:
kernel /boot/bzImage loglevel=7 text no387 nofxsr nortc initrd /boot/core.gz
-
Hi branpurn
Welcome to the forum.
Edit: This was supposed to be an edit to OP but I guess I miss-clicked ...
After 30 minutes, you can no longer edit a post.
I am looking to install Core on a system with 32 MB RAM and an Intel 486. ...
syslinux versus grub should make no difference.
32 MB RAM might be doable, but it will take some work.
Read through this thread:
https://forum.tinycorelinux.net/index.php/topic,27458.0.html
I showed another user some ways to reduce memory usage.
Maybe you can build on some of the ideas found there.
-
kernel /boot/bzImage loglevel=7 text no387 nofxsr nortc initrd /boot/core.gz
I would think that the bootloader syslinux/grub would load initramfs instead of you having initramfs on the command line to the kernel.
-
Note you need a 486 with a maths co-processor for the TC kernel. If you have a 468SX then you'll need a special kernel build with that enabled. Also some older TC versions had bugs with booting on 486, so are you using the latest version?
You need to add "root=" on the kernel command line to point to the root filesystem you should have unpacked to a partition (eg. /dev/sda1). That should replace "initrd".
-
Thanks all, the laptop in question has 486DX2 or 4. I was hoping to use plop boot manager on floppy but I may be misunderstanding the utility of loadlin.
I am trying to get things operational in a VM first; was trying a potpourri of kernel cmdline options (thanks for some of these suggestions) and little else, not enough on their own under 32 MB RAM even with TC 14:
mc base norestore noswap text embed nomodeset nozswap no387 nofxsr nortc nohz=off udev.children-max=1 highres=off mitigations=off nosmp nosmt acpi=off nofstab
I will try some of the other necessary/suggested steps when time allows.
Edit: In addition to all the great info, this previous post (http://"https://forum.tinycorelinux.net/index.php/topic,27458.msg176935.html#msg176935") from Rich is compelling, mem wound up 29 MB used,
I opened a terminal and:
tc@box:~$ sudo cache-clear
tc@box:~$ sync
tc@box:~$ free -m
total used free shared buff/cache available
Mem: 52 29 12 5 11 15
Swap: 999 12 987
tc@box:~$I also have a swap partition that's supplying some space.
-
So based on Rich's script from aforementioned (http://"https://forum.tinycorelinux.net/index.php/topic,27458.msg176935.html#msg176935") post ... I do not currently have a NIC and would just want to get things up as proof of concept,
#!/bin/sh
# Fetch a fresh copy of the initrd.
wget http://repo.tinycorelinux.net/16.x/x86/release/distribution_files/core.gz
# Create a temporary workspace.
mkdir tmp
cd tmp
# Unpack the initrd
zcat ../core.gz | sudo cpio -i
# ---------------- Modify this section to match your system ---------------- #
# Remove the net directory (about 6 Mbytes).
sudo rm -rf lib/modules/6.12.11-tinycore/kernel/drivers/net
# ---------------------- End of modification section ----------------------- #
# Recreate modules.alias and modules.dep in lib/modules/6.12.11-tinycore/.
sudo depmod -a -b . 6.12.11-tinycore
# We don't need the symbols file.
sudo rm -f lib/modules/6.12.11-tinycore/*symbols
# Re-pack the initrd.
sudo find . | sudo cpio -o -H newc | gzip > ../core16Stripped.gz
# Back to our starting directory.
cd ..
# Clean up.
sudo rm -rf tmp
rm -f core.gz
echo "Your new initrd is called core16Stripped.gz"
What exactly should the partitioning look like? I see multiple UUID's defined so not just one big ext2 I would assume; /home /opt mountpoints, what are some good sizes on a 32 GB drive? ... Removed waitUSB as no USB present. What other kernel cmdline params should/might make it in? (RE: mc base norestore noswap text embed nomodeset nozswap no387 nofxsr nortc nohz=off udev.children-max=1 highres=off mitigations=off nosmp nosmt acpi=off nofstab)
menuentry "*** Core-16-x86" {
search --no-floppy --fs-uuid --set=root 2bd65bbc-d71a-48be-8e35-f72f81453a15
linux /tce/Core16/vmlinuz udev.children-max=1 nodhcp nozswap norestore:UUID="2bd65bbc-d71a-48be-8e35-f72f81453a15" tce=UUID="2bd65bbc-d71a-48be-8e35-f72f81453a15" home=UUID="2bd65bbc-d71a-48be-8e35-f72f81453a15" opt=UUID="2bd65bbc-d71a-48be-8e35-f72f81453a15"
initrd /tce/Core16/core16Stripped.gz
}
-
Hi branpurn
... What exactly should the partitioning look like? ...
A single partition anywhere between 2 and 4 gig should be adequate.
... I see multiple UUID's defined so not just one big ext2 ...
Look again. You see the same UUID specified multiple times. That's how Tinycore knows
where to find those directories. I prefer to keep these directories on the same partition.
That way I can install multiple versions of Tinycore with their own directories and keep
them separated. You can create multiple partitions if you wish, but this is simpler.
To get the uuid of a partition:
tc@E310:~$ blkid /dev/sda2
/dev/sda2: LABEL="TC10_backup" UUID="22559ae7-7e12-4a3b-9efa-6f8c8a9a8a6a" TYPE="ext4" PARTUUID="594f4868-02"You'll want the one called UUID=.
... What other kernel cmdline params should/might make it in? ...
I would start with these:
nozswap no387 udev.children-max=1 mem=nopentiumThe mem=nopentium code disables use of 4MB pages for kernel memory
so it should lighten the memory demand.
The remaining kernel parameters you added either don't look like they would
save any memory, or are not valid kernel parameters.
Instead of trying core.gz for the initrd, see if it using rootfs.gz gets you to a command line.
-
Thanks-- So if I extract rootfs directly to the 4 gig ext2 partition, I don't immediately have GRUB to edit with UUIDs, etc.,
So I replaced core.gz with rootfs.gz on the Core ISO, and attempted to boot. I am bad at understanding what the "boot:" prompt wants. I tried a series of things without luck, ex., "initrd /boot/rootfs.gz (...)"
Replaced core.gz with rootfs.gz on the TinyCore ISO, and attempted to boot from GRUB with:
/boot/vmlinuz loglevel=3 initrd=/boot/rootfs.gz noswap no387 udev.children-max=1 mem=nopentium
Kernel panic on VM, but that was TinyCore not Core media
-
Hi branpurn
That should be nozswap not noswap.
Without nozswap , the system will allocate 25% of your RAM to compressed swap space.
Rereading the posts, I see you have a 486DX which I believe does have a math co-processor.
So remove the no387 parameter.
Thanks-- So if I extract rootfs directly to the 4 gig ext2 partition, ...
There's no need to extract anything. Assuming you are using TC16, you can download rootfs.gz
from here:
http://tinycorelinux.net/16.x/x86/release/distribution_files/
... So I replaced core.gz with rootfs.gz on the Core ISO, and attempted to boot. ...
How did you do that? Did you build a new ISO using mkisofs?
... and attempted to boot from GRUB with:
/boot/vmlinuz loglevel=3 initrd=/boot/rootfs.gz noswap no387 udev.children-max=1 mem=nopentium ...
Since you said GRUB and not GRUB2, a typical entry looks like:
title TC10.1_32bit
root (hd0,0)
kernel /boot/vmlinuz quiet tce=UUID="543cac60-3224-4cab-b1d5-008407dd9ce8" home=UUID="543cac60-3224-4cab-b1d5-008407dd9ce8" opt=UUID="543cac60-3224-4cab-b1d5-008407dd9ce8" printk.time=1 syslog nodhcp vmalloc=256MB noisapnp nozswap
initrd /boot/core.gz
-
Thanks!-- my main PC is Windows, so I opened the ISO with AnyBurn, removed core.gz and added rootfs.gz in the same folder. Should be similar result to mkisofs. I grabbed rootfs.gz from the /distribution_files/ similarly;
The GRUB (likely GRUB2) I tried is the one that comes up on the TC ISO (TAB to edit, having dropped rootfs.gz on the ISO) but it looks like maybe I should have GRUB on a drive already (maybe install a throwaway TC install), and point it with the UUIDs.; will give this all a go later
-
If you want to do a HDD install (which uses minimum RAM) like in the guide you were following at the start, use root=[parition where you unpacked core.gz] and remove "initrd=/boot/rootfs.gz" on the kernel command line.
Else if you want to try and make the initramfs small enough to fit in 32MB like Rich suggests, don't unpack it to a partition. In fact it doesn't even know it's there without the "root=" bit.
The first option works for me on my 486 PCs with less than 32MB RAM, but it doesn't follow Tiny Core's unique design. With Rich's way, note that TC copies the contents of initramfs into tmpfs during boot (see the /init script) so you really need twice the space in RAM at that stage. Also I'm not sure how much extra RAM is required for decompressing the gzip-compressed initramfs file during start-up.
-
I guess what I was hoping with extracting to disk is that there’d still be a way to load into RAM without the overhead of decompressing anything at boot, but doesn’t seem it will work that way
-
Took another quick stab at this yesterday with both a reduced core.gz and rootfs.gz; I stripped out extra from core.gz in addition to the script, but not enough; kernel panic (tested on both Core and TinyCore)
I verified beforehand that stripped media was still bootable with higher amount of RAM (tested at 64 MB); also noting, between the DRAM card and onboard mem, I have about 36 MB on the 486.
-
Missed edit window
Paying more attention to that latest screen cap vs. my first, it looks like kernel extraction is complete? Different error (but still goes away w/ increased RAM)
-
yeah!meet a friend to work it on real 486.
1did you get grub work? it's fail to boot in real 486,syslinux is ok.
2 is there way to build minimum kernel make tinyconfig and modify with menuconfig with busybox initramfs?
3 is xserver compile in ititramfs? how to make an scm of xserver?
-
yeah!meet a friend to work it on real 486.
1did you get grub work? it's fail to boot in real 486,syslinux is ok.
2 is there way to build minimum kernel make tinyconfig and modify with menuconfig with busybox initramfs?
3 is xserver compile in ititramfs? how to make an scm of xserver?
No such success
Regrettably I barely get to touch this it's mostly a curiosity for now
It would be neat if Core had a kernel downselect menu like Floppinux, which from 1.44 MB floppy requires 20 MB RAM and 486DX for latest kernel (https://github.com/w84death/floppinux)
-
http://repo.tinycorelinux.net/16.x/x86/release/distribution_files/
can rootfs.xxx file be extract to hdd as rootfs?
-
Hi youxiaojie
It can, but Tinycore was not designed to run that way.
We do not support that mode of installation.
-
http://repo.tinycorelinux.net/16.x/x86/release/distribution_files/
can rootfs.xxx file be extract to hdd as rootfs?
That's how I installed it on a 486 with 16MB RAM (also needed a custom kernel build due to the limited RAM).
Instructions for doing that were quoted in the first post in this thread!
-
What is the purpose of this file?
http://repo.tinycorelinux.net/16.x/x86/release/distribution_files/rootfs.gz
-
Hi neonix
Just what it says. It's the root file system. It contains:
tc@E310:~$ tree -d TinycoreISOs/Rootfs64TC14
TinycoreISOs/Rootfs64TC14
|-- bin
|-- dev
| |-- fd -> /proc/self/fd
| |-- input
| |-- net
| |-- pts
| |-- shm
| `-- usb
|-- etc
| |-- init.d
| | `-- services
| |-- pcmcia
| |-- profile.d
| |-- skel
| |-- sysconfig
| `-- udev
| `-- rules.d
|-- home
|-- lib
| |-- modules
| `-- udev
|-- mnt
|-- opt
|-- proc
|-- root
|-- run
| `-- udev
|-- sbin
|-- sys
|-- tmp
|-- usr
| |-- bin
| |-- lib
| | `-- gconv
| |-- local
| | |-- bin
| | |-- lib
| | | `-- modules
| | `-- tce.installed
| |-- sbin
| `-- share
| |-- doc
| | |-- License
| | `-- tc
| |-- i18n
| | `-- charmaps
| |-- kmap
| |-- locale
| |-- misc
| |-- syslinux
| |-- tabset
| |-- terminfo
| | |-- a
| | |-- l
| | |-- r
| | |-- v
| | `-- x
| `-- udhcpc
`-- var
|-- cache
|-- lib
|-- lock
|-- log
|-- run
|-- spool
| |-- cron
| | `-- crontabs
| `-- lpd
`-- tmp -> /tmp
69 directories
I only listed the directories. There are also about 600 files in there.
If you wish to see all of the contents yourself:
mkdir tempdir
cd tempdir
zcat /path/to/existing/rootfs.gz | sudo cpio -i
-
Why I can't unpack core.gz? If TinyCore was was not designed to run that way, then why rootfs.gz was placed in repo?
-
Why I can't unpack core.gz? If TinyCore was was not designed to run that way, then why rootfs.gz was placed in repo?
There's no reason you can't unpack core.gz using the same method as for rootfs.gz.
As I understand it, core.gz is literally just rootfs.gz appended to modules.gz. This is part of a modular approach to building software. The existence of core.gz just makes it so that you can put together a system with two files (vmlinuz and core.gz) instead of three (vmlinuz, rootfs.gz and modules.gz).
-
Hi neonix
... then why rootfs.gz was placed in repo?
Here's a couple of reasons.
If you do this:
cat rootfs.gz modules64.gz > core64.gzand then boot vmlinuz64 along with core64.gz.
It allows you to run 32 bit programs under a 64 bit kernel.
This gives you a kernel that can manage a large amount of RAM and
allocate up to 4 Gig of RAM to each 32 bit program you are running.
You can not run 64 bit programs in this type of environment.
If you don't want or need any of the included drivers, you can use
rootfs.gz instead of core.gz for your initrd.
-
Picked up a 2 GB CF card and an IDE adapter, so did frugal install of Core to that.
Installing from ISO, I specified the following boot options at the end of tc-install.sh: nozswap udev.children-max=1 mem=nopentium
SYSLINUX 6.03 CHS 2014-10-06 Copyright (C) 1994-2014 H. Peter Anvin et al
Booting kernel failed: Invalid argument
boot: nozswap udev.children-max=1
_
I am positive I typed the boot options correctly at end of tc-install.sh, if I remove mem=nopentium it "continues..."
I get a "high low" beep code, and then it sits with a blinking cursor. I'll leave it sit for an undetermined amount of time.
-
Do you use a editor thats wrap the line ?
If using nano add -w to set nowrap.
sudo nano -w /mnt/sda2/boot/extlinux/extlinux.conf
-
I am positive I typed the boot options correctly at end of tc-install.sh, if I remove mem=nopentium it "continues..."
My understanding is that mem=nopentium should be default on a 486 anyway. It's described more clearly in older docs (https://chuck.stanford.edu/planetccrma/man/man7/bootparam.7.html):
You can also use the boot argument `mem=nopentium' to turn off 4 MB
pagetables on kernels configured for IA32 systems with a pentium or
newer CPU.
I get a "high low" beep code, and then it sits with a blinking cursor. I'll leave it sit for an undetermined amount of time.
That sounds about typical for if it ran out of RAM while unpacking core.gz into initramfs. However I don't use Syslinux on 486 (I boot from MSDOS with LOADLIN, to a HDD install without core.gz as described earlier), so perhaps there's another problem with it. It reminds me of what LOADLIN does (after a long loading delay) when it runs out of RAM unpacking core.gz though.