LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Hardware (https://www.linuxquestions.org/questions/linux-hardware-18/)
-   -   modpost warnings when building a driver... please help (https://www.linuxquestions.org/questions/linux-hardware-18/modpost-warnings-when-building-a-driver-please-help-660734/)

tachwali 08-05-2008 07:42 PM

modpost warnings when building a driver... please help
 
Hello folks,

I have a problems in building a driver for a module that I have, the kernel in my machine is 2.6.9 and upon building the driver, I got the following warning:
*** Warning: "unregister_hdlc_device" [path to ko file] undefined!
*** Warning: "hdlc_ioctl" [path to ko file] undefined!
*** Warning: "hdlc_open" [path to ko file] undefined!
*** Warning: "register_hdlc_device" [path to ko file] undefined!
*** Warning: "hdlc_close" [path to ko file] undefined!
*** Warning: "alloc_hdlcdev" [path to ko file] undefined!

After that, I could not load the driver... upon using insmod, I get:
insmod: error inserting 'ko file': -1 Unknown symbol in module

If anybody has any clue or suggestions on the cause of this problem, I would appreciate alot the help.

Thank you

unSpawn 08-06-2008 07:19 AM

Quote:

Originally Posted by tachwali (Post 3238084)
*** Warning: "unregister_hdlc_device" [path to ko file] undefined! (..) After that, I could not load the driver... upon using insmod, I get: insmod: error inserting 'ko file': -1 Unknown symbol in module

Warnings are not there to ignore. When you have a warning at the previous stage then you can be sure the next stage will fail as well, no sense in continuing. Grep your /kernel/source/.config for anything that provides '.*HDCL.*' and check if it's either built-in or is available as module. If some aren't then you may need to clean up your source (could try without cleaning but I don't know how it affects dependencies), reconfigure and try building again.

tachwali 08-06-2008 10:47 AM

Quote:

Originally Posted by unSpawn (Post 3238576)
Warnings are not there to ignore. When you have a warning at the previous stage then you can be sure the next stage will fail as well, no sense in continuing. Grep your /kernel/source/.config for anything that provides '.*HDCL.*' and check if it's either built-in or is available as module. If some aren't then you may need to clean up your source (could try without cleaning but I don't know how it affects dependencies), reconfigure and try building again.

THank you very much for the clue about the .config. I found the following upon grepping on hdlc:

# CONFIG_HDLC is not set
CONFIG_HISAX_HDLC=y
CONFIG_N_HDLC=m

so it might be that I need to set CONFIG_HDLC. How can I decide whether I need to set it to y (kernel) or m (module)? Also, upon doing this mod, I need to rebuild the kernel. If I wanna avoid rebuilding kernel, is it an option to download an RPM for HDLC rather than setting .config file or not..

Thank you again for your help

unSpawn 08-06-2008 03:57 PM

Quote:

Originally Posted by tachwali (Post 3238815)
How can I decide whether I need to set it to y (kernel) or m (module)?

Some options affect others, some are simple booleans, others are tri-states, so unless you're familiar with those dependencies and are comfortable editing the .config by hand I'd suggest using any form of 'make menuconfig'.


Quote:

Originally Posted by tachwali (Post 3238815)
If I wanna avoid rebuilding kernel, is it an option to download an RPM for HDLC rather than setting .config file or not..

If there's an RPM for HDLC then it should fit some specific distribution kernel version. If yours is a custom built kernel it may or may not work.

tachwali 08-07-2008 02:03 AM

Quote:

Originally Posted by unSpawn (Post 3239080)
Some options affect others, some are simple booleans, others are tri-states, so unless you're familiar with those dependencies and are comfortable editing the .config by hand I'd suggest using any form of 'make menuconfig'.



If there's an RPM for HDLC then it should fit some specific distribution kernel version. If yours is a custom built kernel it may or may not work.

Thanks alot of the clarification. In fact, I went to menuconfig to add the required HDLC support. However, after finishing and saving my changes. I have tried to rebuild by typing make at the kernel path and I got the following error:

[root@localhost 2.6.9-42.EL-i686]# make
CHK include/linux/version.h
CHK include/asm-i386/asm_offsets.h
/bin/sh: arch/i386/kernel/asm-offsets.s: No such file or directory
UPD include/asm-i386/asm_offsets.h
mv: cannot stat `include/asm-i386/asm_offsets.h.tmp': No such file or directory
make: *** [include/asm-i386/asm_offsets.h] Error 1


I am using CentOS with kernel 2.6.9 as you can see. I found this problem discussed alot in the group community but I got so confused with the formal way of addressing this problem. Would you please lead me to the appropriate solution to this problem. I would appreciate alot your help.

unSpawn 08-07-2008 06:23 AM

May be due to building a kernel before? Try 'make clean' before you 'make'. If that fails you can 'make mrproper' but please copy your .config out of the main kernel directory before doing that because it nukes the source good, then copy it back in after which you should be able to 'make oldconfig && make'.

tachwali 08-10-2008 05:26 PM

Quote:

Originally Posted by unSpawn (Post 3239715)
May be due to building a kernel before? Try 'make clean' before you 'make'. If that fails you can 'make mrproper' but please copy your .config out of the main kernel directory before doing that because it nukes the source good, then copy it back in after which you should be able to 'make oldconfig && make'.

Thank you for the heads up on this. I have tried these commands above but I still get the same messages. I have tried many times in the last days to get a complete source code for a 2.6.9 kernel since I guess the problem that I could not "make" in my current kernel is because I do not have the complete source tree. I have followed the procedure in howto at wiki.centos.org website to install a new kernel using RPM packages but I ended up with the following :
-----------------------------------------------------
[root@localhost i686]# rpm -ivh kernel-*.rpm
Preparing... ########################################### [100%]
package kernel-2.6.9-67.0.22.EL is already installed
package kernel-devel-2.6.9-67.0.22.EL is already installed
package kernel-hugemem-devel-2.6.9-67.0.22.EL is already installed
package kernel-smp-devel-2.6.9-67.0.22.EL is already installed
file /boot/System.map-2.6.9-67.0.22.EL from install of kernel-2.6.9-67.0.22.EL conflicts with file from package kernel-2.6.9-67.0.22.EL
file /boot/config-2.6.9-67.0.22.EL from install of kernel-2.6.9-67.0.22.EL conflicts with file from package kernel-2.6.9-67.0.22.EL
file /boot/symvers-2.6.9-67.0.22.EL.gz from install of kernel-2.6.9-67.0.22.EL conflicts with file from package kernel-2.6.9-67.0.22.EL
file /boot/vmlinuz-2.6.9-67.0.22.EL from install of kernel-2.6.9-67.0.22.EL conflicts with file from package kernel-2.6.9-67.0.22.EL
------------------------------------------------------------

However, I was able to reboot with the new kernel but still I can not find o files for my HDLC in the kernel path under driver/net/wan. I am listing below the steps that I did to install a new customized kernel starting from fresh installation of CentOS 4.4 with kernel 2.6.9-42

1- getting the kernel:
1.1 access as root
1.2 yum install rpm-build redhat-rpm-config
1.3 su user
1.4 cd
1.5 mkdir -p rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
1.6 echo "%_topdir %(echo $HOME)/rpmbuild" > .rpmmacros
1.7 rpm -i http://mirror.centos.org/centos/4/up....22.EL.src.rpm 2> /dev/null
1.8 cd ~/rpmbuild/SPECS
1.9 rpmbuild -bp --target=`uname -m` kernel-2.6.spec 2> prep-err.log | tee prep-out.log

These so far sound fine. but then I guess there might be a mistake or missing step in my procdure to build the new kernel:

2- building a new kernel:
2.1 access as root
2.2 rpmbuild -bp --target=`uname -m` kernel-2.6.spec 2> prep-err.log | tee prep-out.log
2.3 su user
2.4 cd ~/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.`uname -m`
2.5 cp configs/kernel-2.6.18-i686.config .config
2.6 make oldconfig
2.7 make menuconfig {here I left it as is and did not do any modification since I am planning to include HDLC as a module after build a complete custom kernel}
2.8 [user@host SPECS]$ rpmbuild -bb --target=`uname -m` kernel-2.6.spec 2> build-err.log | tee build-out.log
2.9 su
2.10/ rpm -ivh kernel-*.rpm

and after the last command I have got the conflict warning above. What is wrong in my installation procedure! :( Please help.


_______________________________________________
CentOS mailing list
CentOS@centos.org
http://lists.centos.org/mailman/listinfo/centos

tachwali 08-11-2008 12:57 AM

Quote:

Originally Posted by tachwali (Post 3242943)
Thank you for the heads up on this. I have tried these commands above but I still get the same messages. I have tried many times in the last days to get a complete source code for a 2.6.9 kernel since I guess the problem that I could not "make" in my current kernel is because I do not have the complete source tree. I have followed the procedure in howto at wiki.centos.org website to install a new kernel using RPM packages but I ended up with the following :
-----------------------------------------------------
[root@localhost i686]# rpm -ivh kernel-*.rpm
Preparing... ########################################### [100%]
package kernel-2.6.9-67.0.22.EL is already installed
package kernel-devel-2.6.9-67.0.22.EL is already installed
package kernel-hugemem-devel-2.6.9-67.0.22.EL is already installed
package kernel-smp-devel-2.6.9-67.0.22.EL is already installed
file /boot/System.map-2.6.9-67.0.22.EL from install of kernel-2.6.9-67.0.22.EL conflicts with file from package kernel-2.6.9-67.0.22.EL
file /boot/config-2.6.9-67.0.22.EL from install of kernel-2.6.9-67.0.22.EL conflicts with file from package kernel-2.6.9-67.0.22.EL
file /boot/symvers-2.6.9-67.0.22.EL.gz from install of kernel-2.6.9-67.0.22.EL conflicts with file from package kernel-2.6.9-67.0.22.EL
file /boot/vmlinuz-2.6.9-67.0.22.EL from install of kernel-2.6.9-67.0.22.EL conflicts with file from package kernel-2.6.9-67.0.22.EL
------------------------------------------------------------

However, I was able to reboot with the new kernel but still I can not find o files for my HDLC in the kernel path under driver/net/wan. I am listing below the steps that I did to install a new customized kernel starting from fresh installation of CentOS 4.4 with kernel 2.6.9-42

1- getting the kernel:
1.1 access as root
1.2 yum install rpm-build redhat-rpm-config
1.3 su user
1.4 cd
1.5 mkdir -p rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
1.6 echo "%_topdir %(echo $HOME)/rpmbuild" > .rpmmacros
1.7 rpm -i http://mirror.centos.org/centos/4/up....22.EL.src.rpm 2> /dev/null
1.8 cd ~/rpmbuild/SPECS
1.9 rpmbuild -bp --target=`uname -m` kernel-2.6.spec 2> prep-err.log | tee prep-out.log

These so far sound fine. but then I guess there might be a mistake or missing step in my procdure to build the new kernel:

2- building a new kernel:
2.1 access as root
2.2 rpmbuild -bp --target=`uname -m` kernel-2.6.spec 2> prep-err.log | tee prep-out.log
2.3 su user
2.4 cd ~/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.`uname -m`
2.5 cp configs/kernel-2.6.18-i686.config .config
2.6 make oldconfig
2.7 make menuconfig {here I left it as is and did not do any modification since I am planning to include HDLC as a module after build a complete custom kernel}
2.8 [user@host SPECS]$ rpmbuild -bb --target=`uname -m` kernel-2.6.spec 2> build-err.log | tee build-out.log
2.9 su
2.10/ rpm -ivh kernel-*.rpm

and after the last command I have got the conflict warning above. What is wrong in my installation procedure! :( Please help.


_______________________________________________
CentOS mailing list
CentOS@centos.org
http://lists.centos.org/mailman/listinfo/centos


I figured out what I am missing and I got the driver built and working now. In my procedure posted above, I was missing to define buildid in kernel-2.6.spec. In fact what should be done before 2.8 is to :
-vi kernel-2.6.spec
-add in line 69: %define buildid .your_identifier
This will avoid a conflict with my currently installed kernel.

I am still wondering if what I did is an overkill to get the module loaded. I had the CentOS 4.4 with kernel 2.6.9.42 before installing this 2.6.9.67 kernel. Is there a way to get the HDLC module built and installed with minimal steps rather than going into a complete fresh kernel rebuilt?
As mentioned in the posts above, "make" and "make install" after editing the config file should be all what I need. But unfortunately that did not work in my original kernel, and that is why I decided to get a fresh kernel to experiment on.
If I can really get HDLC built and load without kernel build or download another kernel source. What could be missing in my original 2.6.9.42 kernel that prevents me from doing make and make install after editing the config file?

Thank you to all of you for providing help and explanations.


All times are GMT -5. The time now is 02:07 AM.