Programming :: Avoiding Global Variables In Kernel Modules?
Jun 27, 2010
I have two modules A and B in the kernel which i am trying to hack by introducing a variable in A which is of type 'extern' (and using EXPORT_SYMBOL) and then calling it in B. Now the problem is how to introduce that variable in module A. Currently i have made a global variable and it works fine but global variable in kernel is a bad bad thing.
I tried having an 'extern' function in A which have that variable and calling that function in module B, but then again how would module A use my variable unless the variable is available outside the scope of that function and that again means a global variable.
step 2 - update ~/.bashrc export some new variables
step 3 - check said variables, if they return a value then we know a reboot has taken place and we can continue to step 4. otherwise halt and isssue a warning that a reboot is needed.
Ok, so this works if I just execute the script when I am logged on as root, and after a reboot & rerun of the script I can check the variables exist and the program will continue as expected. only when I am logged on as root will the variables I exported in bashrc return a value. If I run the script as sudo root the values are blank.
I have a general question regarding php. Suppose that I want to have an array that stores connection-specific data, that can be anything IP address or something similar. However, whenever I use global or server variables (i.e. GLOBALS or _SERVER) the array created in this way is kind of connection-oriented, so that for each connection there is a separate instance of this array. Maybe it has something to do with the MPM of Apache, but I am not sure. Is it possible to implement an array that stores information about all connections that are at a system? In this way, each connection can chip in and upload it with data? Also, I would rather not use cookie's.
I have a problem with a very big script I wrote in bash, and now I need to modulirize it in at least four smaller scripts. The problem is, that most of the variables I have will need to be shared by all scripts.
My question is: is there a way to declare global variables in bash? So that I can use and change them in any of the scripts and every change in the variable can be "seen" by the other scripts later.
I am trying to setup Slacware 13.1 x86_64 to a encrypted partition. I used the README_CRYPT.TXT howto : [URL] At the step when I create an initrd.gz I get this error: Quote: ERROR: No /lib/modules/2.6.33.4-smp kernel modules tree found for kernel "2.6.33.4-smp"
I tried to look into the directory and there was only modules under 2.6.44.3. So I tried to change the command into: Quote: mkinitrd -c -k 2.6.33.4 -m ext3 -f ext3 -r cryptroot -C /dev/sda2
This command was successful, but I don't know if this is alright. I made the changes in lilo.conf, add initrd = initrd.gz. This is all on unencrypted /boot partition. The boot=/dev/sda1 I also set for the unencrypted boot partition. When I boot the system I get a kernel panic:
I am writing a kernel module which need to do something at some interval. Now this problem can be solved by using a user process, which will send signal to the kernel and the kernel would do accordingly. But it would be nice, i could do it within the kernel module itself. Is there any way to use SIGNALs inside the kernel module?
I was trying to install VirtualBox through the YaST > Software Management but it is not working, someone in the forum told me that I have to download the OSE version and do it manual way. Finally I am able to start up VB but not able to use the network connection. Thus I am trying to do this:
/etc/init.d/vboxdrv setup. I get this error:
[code]...
When I type dmesg, it shows me a bunch of info which I don't know what should look for. When I type modprobe vboxnetflt, I get the error: FATAL: Error inserting vboxnetflt (/lib/modules/2.6.37.1-1.2-default/updates/vboxnetflt.ko): Invalid module format. what should I do in order to get my VB to be able to connect to the internet?
I have a script which lists all the SID listed in /etc/oratab and then after the user select which SID to set, it calls another script to set the SID and other environment variables.
The script runs just fine and does all that is expected, but the variables are not set permanently, can't figure out why. Everything works fine when I run the setsid.sh out of this script.
I need to debug "ls". I downloaded coreutils and compiled them in debug mode."ls" uses readdir() kernel API to fetch files/directories from a file system. readdir() fetch data from any file system (suppose FAT or ext3).I have debug version of FAT/ext3 and installed, I also have debug version of coreutils (ls) as well.Now I want to debug from "ls" to "FAT/ext3 readdir()".How to do that?
ubuntu could delay kernel module installation until device is inserted?Take my usb ath9271 wifi adapter as an example: when kernel boot up, no ath modules are installed until usb wifi apdapter is inserted, ath related modules are insmod.Could anybody how to achieve this? udev or something else?
i am trying learn to program linux kernel modules and smoothly transition in device driver programming. I have a year and a half worth of programming in C and have been using linux for years!! But my question is how do i compile a module? I got as far as coding it but am stuck as of now.
Thanks to a recommendation and extensive help at phpbuilder.com, I have a multithreaded PHP script running in the cloud which fetches images and stores them the cloud. It's fast and seems quite stable.However, I believe I'm faced with a situation where I need to introduce an additional lock to my code so I'm faced with the task of managing multiple locks while avoiding deadlock.I was wondering if anyone had experience managing multiple locks in a MT environment and could recommend specific functions and data structures. I've been reading up on resource management in MT code and understand a few things:
1) Any shared resource (global and static vars, memory, file descriptors, etc.) generally needs to be protected by some kind of mutex, lock, or other sync var. 2) There are certain necessary conditions for deadlock to occur. 3) You generally need a sequence or hierarchy of your resources so that all threads request them in the same order. This sequence must be the same and immutable for all participating threads, whether local or remote. 4) Recursion is a very common cause of deadlock, so a process should know what locks it has acquired previously in order to avoid blocking in the attempt to re-acquire those same locks again. 5) There are a variety of algorithms described such as the Banker's Algorithm, the Chandy/Misra solution, etc. to help avoid deadlock.
I'm hoping to come up with a technique for properly handling multiple locks/mutexes/sync vars that I can re-use in the future, but I'm still coming to grips with the algorithm descriptions and am unsure precisely what sorts of data structures or functions I'll need.
I can define all variables in tcl programming in a file for instance var.cfgand source the same file in my tcl script such assource var.cfgIs this possible in perl too?
I have just compiled a new kernel. When I boot into this new kernel and do an lsmod it is only running two modules. The only thing I changed in the configuration file was to compile ext4 file system into the kernel. My computer is an HP Pavilion dv4. The two modules are lirc_ene0100 and lirc_dev. I am running Ubuntu 10.04. The new kernel is 2.6.32.15+drm33.5. The kernel seems to work fine but I need to know why and how it can only be running two modules.
I have a Red Hat 4.9 server running python 2.3.4. However I need some of the new functions so I downloaded and installed Python 2.7.1. I wanted to use the "set" function which was not in the earlier version.
/bin/python is 2.3.4 /usr/local/bin/python is 2.7.1
I have a script running 2.3.4 which calls the 2.7.1 script however it fails because it cannot find the "set" command here is an example
I've had to do some code in java, a language I'm very much unfamiliarly with so please excuse my incorrect use of terms. The basic outline of my problem is I create a class object as a local within a swing button function it works fine. If I create it as a global ( with I think I need to do ) within main, then prototype it with the other swing objects at the bottom of the file when it is called it causes a host of problems. I think the easiest way is to show it.
I found an interesting screencast online about how to make gtk Pyton apps. The thing is, though, the guy was using the interactive shell. I've been trying to get his code into a script, and have been having troubles.
Here's what I got:
Code:
It spits out the error "NameError: global name 'browser' is not defined"
I know I'm doing something wrong with how I'm telling it where to find "browser" and "text", but I can't figure out how to point it to the right place.
I'm trying to install VMWare server on my Kubuntu box and it's telling me there are 3 "kernel modules" that it needs me to remove (apparently they were installed previously and VMWare isn't liking that).How do I remove them? Never messed with the kernel modules before.
I recently updated the kernel from SLES 11 to SLES 11 SP1 .However my kernel modules are not getting loaded and they throw an error such as shown below:"Errornserting mii : Unknown symbol in module, or unknown parameter (see dmesg)"
I am trying to write kernel modules. And am running Ubuntu 10.04 x64. I have downloaded both kernel source and headers. Unpacked kernel source and made a /usr/src/linux symbolic link pointing to the src. Here is the output of running make:
How do I get modules in the Kernel to load automatically at boottime? I''m specifically trying to get i810fb to load during the boot process. In Ubuntu, I just had to edit a file and update my initramfs. How do I do this in Fedora?
The new kernel upgrade on Fedora 14 will not boot. lib/modules do not exist is the message. Grub was adjusted to match the old kernel, and the new kernel when booting says lib/modules do not exist. The old kernel has twice as many modules as the new kernel in lib/modules. How do I get the new modules to install so I can boot with the new kernel then? Should I reinstall the new kernel?
I am having some issues compiling kernel modules against the pre-built OpenSUSE kernel. Whenever I compile a module and try to load it, I get something like:
Code: insmod fs/smbfs/smbfs.ko insmod: error inserting 'fs/smbfs/smbfs.ko': -1 Invalid module format It doesn't actually matter what the module is, they all do the same thing. I have tried the above mentioned smbfs, I've also tried:vmware kernel module
I am attempting to compile the linux-2.6.35.13 kernel from kernel.org to use with an installation of Fedora 14 (2.6.35.11-83.fc14.x86_64). I've done this before with different kernel versions for older versions of Fedora, but I've encountered a new problem this time. Whenever I get to the "make install" step, I get the following:Quote:
sh /home/user/testing/source/linux-2.6.35.13/arch/x86/boot/install.sh 2.6.35.13 arch/x86/boot/bzImage System.map "/boot"
It has been years since I have need to compile the kernel or its modules. Here goes: I recently upgraded to ubuntu 10.10 and needed the kernel source and its modules source. The relevant directories are in a mess. Several diff versions, broken links, the works. Is there a nice easy way, to remove all of the sources, there, and err "install" the ones for my latest kernel, in the correct places. Then I might have a chance at getting the two modules I need complied! Nvidia being one for the geforce 4 mx420 nv17
I only have basic experience recompiling a Linux kernel, and I have a question about adding dynamic modules.In case I want to add a brand new module, do I need to recompile the kernel to include a reference to that new module, or is simply compiling a kernel with generic support of dynamic modules all it takes to add whatever modules I need later on, without recompiling the kernel and rebooting the host?
I upgrade my slackware to slackware-current. But, when I look /etc/rc.d/rc.modules, it's still symlink to old kernel. Is this normal? Or i must change the symlink manually?