quote:
more things about the internal structure of the OS.
You know: Windows has WDMs, VXDs, DLLs, blah, blah - Linux has ??? made of ??? that interact ???. Maybe a Linux glossary?
Okay, Linux works like this:
The whole darn thing is one connected piece of source code(one program, IOW) that is loaded at boot by Lilo or Grub. The bz in front of bzImage stands for the compression algorithm. It used to be called zImage because it used the gzip compression algorithm. Anyway, Lilo loads the uncompressed form into memory, then passes execution to it. The kernel then mounts the filesystem read only, so that it can get more information about how the system is configured.
Starting with the 2.0.x series, all Linux kernels are modular, so that unneeded modules can be deleted to save space in memory and on disk. The modules are .o, just like object files that haven''t been linked yet. In fact, they are pretty much just that.
Then, it loads all the modules it needs for the rest of the boot process. Then it reads which filesystems you want mounted, and mounts them. Filesystems work by specifying an integer for each file, called an inode. Each directory is really just a file listing all the names and inodes of the files in it(including other directories). An inode and the file it represents need not have a unique location. There''s a reference count that tracks when a file has no locations, however.
Then, it reloads the fs as read-write, and it runs a program called init, which runs the processes needed at bootup. In a directory called /etc/init.d, there are scripts that run each of these programs. IIRC(which I probably don''t), in directories called /etc/rc.x, which contain scripts needed by each runlevel. Runlevels are useful abstractions for how much work is being done by a system. A system in runlevel 2 is in single-user mode. Runlevel 3 is normal, console. Runlevel 5 is X-windows. /etc/inittab contains the default runlevel(in ASCII, so you can read and modify it). Runlevels 0 and 6 stand for shutdown and rebooting respectively. Init runs all the scripts up to and including those for the current runlevel. They are run in lexical order, so there''s usually a naming scheme to each script to make sure they run in the correct order.
Init eventually runs login, which allows you to enter your name and password. Login uses PAM, the arcitecture of which I don''t understand particularly well, just enough to use. Basically it''s a bunch of .so''s that you can use to set the level of security for each function. More on .so''s:
Larger programs use .so''s, which are Shared Object files(hence the suffix). Shared object files are essentially the same as the object files generated by a standard compiler. There''s no standard like COM to dictate how to use them. An annoyingly circular architecture is present here. A shared library called ld.so is called whenever dynamic linking is present in a program. It finds the references to libraries it knows about, and loads their code into memory, and replaces the references with addresses to the loaded copy.(there''s some caching here, and some reuse of code, too)
That should give you enough to google if you need more.
In answer to your original question, though, you could have just typed:
insmod /lib/modules/linux-<tab>/fs/ntfs.o
<tab> in bash finds and completes the filename. So basically, insmod /lib/modules/linux-2.4.17-1/fs/ntfs.o
or something like that is what it will look like.
I found a while ago that you''re not supposed to directly use insmod, there''s some program that''s better for that kind of thing. It will load a module and its dependencies, too. I can''t remember what it was called, though. Look for the previous thread on loading vfat(vfat can''t be loaded unless fat is present as well). Ntfs might also have some dependencies.