View previous topic :: View next topic |
Author |
Message |
pjp Administrator
Joined: 16 Apr 2002 Posts: 20476
|
Posted: Sat Jun 22, 2024 5:39 am Post subject: How are kernel environment variables used? |
|
|
After setting them, I expected this to work: Code: | $ make -C /usr/src/linux oldconfig
$ make -C /usr/src/linux modules_install
$ make -C /usr/src/linux install | Output and install locations are not under /usr/src/linux.
INSTALL_MOD_PATH, INSTALL_PATH and O are set in the environment and "printenv <varname>" shows the expected output.
Instead of my expected usage, I have to do this, which seems much less useful: Code: | $ make -C /usr/src/linux O=$O oldconfig
$ INSTALL_MOD_PATH=$INSTALL_MOD_PATH make -C /usr/src/linux O=$O modules_install
$ INSTALL_PATH=$INSTALL_PATH make -C /usr/src/linux O=$O install | Also, INSTALLKERNEL doesn't seem to work at all as this seemed to have no affect: Code: | $ INSTALLKERNEL=$INSTALLKERNEL INSTALL_PATH=$INSTALL_PATH make -C /usr/src/linux O=$O install | $HOME/bin/installkernel does work, but is less flexible and seemingly means the variable doesn't work at all.
The above not working and working behavior seems counter to the point of having an environment variable, so how are they intended to be used?
As an aside, both the Handbook and Kernel Configuration show using root, which may contribute to why so many use root. _________________ Quis separabit? Quo animo? |
|
Back to top |
|
|
Goverp Advocate
Joined: 07 Mar 2007 Posts: 2170
|
Posted: Sat Jun 22, 2024 10:14 am Post subject: |
|
|
I ended up writing a script to handle this, as documented in a wiki page, which might be helpful. _________________ Greybeard |
|
Back to top |
|
|
Hu Administrator
Joined: 06 Mar 2007 Posts: 22598
|
Posted: Sat Jun 22, 2024 2:49 pm Post subject: |
|
|
Setting INSTALL_PATH and INSTALL_MOD_PATH in the environment has always worked for me. I use KBUILD_OUTPUT, not O to influence the output directory though. As I read the Makefile, there is special logic to respect O only if it is assigned on the command line: Makefile: | # Do we want to change the working directory?
ifeq ("$(origin O)", "command line")
KBUILD_OUTPUT := $(O)
endif
| I cannot say why that was done, because it dates to the beginning of the git history. If I were to guess, I would guess that O is such a simple name that someone was worried users would have an environment variable named O for some other purpose, and get bad results. The name KBUILD_OUTPUT is sufficiently distinctive that anyone who has that set almost certainly is doing it to influence the kernel build. |
|
Back to top |
|
|
pjp Administrator
Joined: 16 Apr 2002 Posts: 20476
|
Posted: Sat Jun 22, 2024 3:35 pm Post subject: |
|
|
@Goverp,
Thanks, I may eventually make a script too. I suspect that won't be a problem. For when a step fails though, it seems like having the manual method would be helpful.
@Hu,
Thanks, I'll try some more stuff. I originally used KBUILD_OUTPUT, but that didn't work so I switched to O (several years ago by now).
I don't recall if manually using export <varname> ever worked, but wanting to automate it, I switched to creating an environment variable script that sets the variables, then exports them. Both echo and printenv work with those variables, so that seems like it should work. _________________ Quis separabit? Quo animo? |
|
Back to top |
|
|
Hu Administrator
Joined: 06 Mar 2007 Posts: 22598
|
Posted: Sat Jun 22, 2024 4:01 pm Post subject: |
|
|
I set all of $KBUILD_OUTPUT, $INSTALL_PATH, and $INSTALL_MOD_PATH via a helper script that then starts a subshell with those in its environment. This has worked reliably for me for a long time. |
|
Back to top |
|
|
pjp Administrator
Joined: 16 Apr 2002 Posts: 20476
|
Posted: Mon Jun 24, 2024 1:26 am Post subject: |
|
|
Well, using KBUILD_OUTPUT worked for 'menuconfig.' I was going to wait until the next stable version to update, but who knows when that will happen, so I'll probably try this week.
Interesting that O doesn't work (and seemingly INSTALLKERNEL). _________________ Quis separabit? Quo animo? |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|