4

I am compiling the Linux kernel for my specific hardware and I only select the drivers/options which I really need. This is in contrast to a typical distribution kernel, where they compile almost everything, to be compatible with as many hardware configurations as possible.

I imagine, for my kernel, I am only using 1% of the total kernel code (order of magnitude estimate).

Is there any way to find out which files from the kernel source I have actually used when I build my kernel?

This is not an academical question. Suppose I have compiled my kernel 3.18.1. Now a security update comes along, and 3.18.2 is released. I have learned in my other question how to find which files have change between releases. If I knew whether any of the files I am using have changed, I would recompile my kernel to the new version. If, on the other hand, the changes only affect files which I am not using anyway, I can keep my current kernel version.

Thomas Keller
  • 62
  • 1
  • 3
  • 16
  • I can't see an easy and reliable way to make this monitoring based on your screen output. However, you could use the `inotify` api and right before you hit enter on `make`, create a notification to log to a file or print to `STDOUT` http://unix.stackexchange.com/questions/163572/how-to-move-a-file-to-another-directory-as-soon-as-it-is-created-in-linux/ - is just a matter of monitoring what files are read during your build process :) –  Mar 18 '15 at 19:58
  • If there is a change in a file which you do not compile. How does it affect you. You can just run make to be safe, and see if make says "up-to-date" or is building some files? – Milind Dumbare Mar 19 '15 at 09:29

1 Answers1

6

Compiling my comment as answer:

  1. Run the following command on one shell. You can make a shell script of it or demonize with the -d option.

    inotifywait -m -r -e open --format '%f' /kernel_sources/directory/in_use/ -o /home/user/kernel_build.log
    
  2. On other shell, execute make

  3. The log file /home/user/kernel_build.log will have a list of the files that have been opened(read operation) during the build process.
  • this looks like this might work. I wonder though, whether there is no easier (more direct) way to do it. – Thomas Keller Mar 18 '15 at 20:39
  • You could use `find /home/ -atime +1` to see what files were acessed on the last 2 days for example, but i think inotify would be a more reliable way to get this info ;) –  Mar 18 '15 at 20:53
  • yes, but `atime` only works if your filesystem supports it (is mounted with that option). – Thomas Keller Mar 18 '15 at 21:06
  • For sure. Since even the "purest" form of read still writes something to disc, like `cat /etc/fstab` will write on the file metadata information about when it was last acessed, mount points with `noatime` will cause you problems and, that's why i marked the find solution as not reliable :) –  Mar 18 '15 at 21:35