On Sat, Jun 28, 2008 at 3:14 AM, Adrian Bunk <[EMAIL PROTECTED]> wrote:
> On Sat, Jun 28, 2008 at 02:51:51AM +0500, Shaz wrote:
>> On Sat, Jun 28, 2008 at 2:32 AM, Adrian Bunk <[EMAIL PROTECTED]> wrote:
>> > On Sat, Jun 28, 2008 at 02:16:14AM +0500, Shaz wrote:
>> >> Hi,
>> >>
>> >> Need to compile an external module as a kernel built-in module. Its
>> >> Makefile is set as obj-m meaning as a loadable module so it will be
>> >> kept on filesystem separately. This means I have to do obj-y to make
>> >> it built-in. But I wanted to know, before I just try it out, that the
>> >> Makefile of the kernel module is way too complex for me and there was
>> >> an install target which is creating files for miscilleneous functions
>> >> of the module and it had a /dev/<module-name>, which means its a
>> >> device driver.
>> >>
>> >> So what do I need to consider apart from the change obj-m to obj-y?
>> >
>> > It does not work this way.
>>
>> Are you sure because in kernel top-level Makefile contains SUBDIRS
>> symbol for external modules and if it contains a path then target all
>> becomes _all else _all becomes modules. Personally, I am not sure of
>> this behavior but I think if we can do obj-y instead of obj-m than
>> maybe this module is built-in. Sorry you already said it's not
>> possible but I am still curious why it doesn't in the light of
>> SUBDIRS.
>
> The reason is simple:
> When an external module gets built the kernel image is not rebuilt.
Thats what I am trying to say. I am newbie but the following makes sense to me:
If the SUBDIRS will take "make" to the external module by setting its
value to KBUILD_EXTMOD. Consider the following lines from kernel
Makefile:
# If building an external module we do not care about the all: rule
# but instead _all depend on modules
PHONY += all
ifeq ($(KBUILD_EXTMOD),)
_all: all
else
_all: modules
endif
If the module's Makefile consists of obj-y instead of obj-y then its
should work. ...?
>
>> By the way can you suggest how do I workout getting the code inside
>> the kernel source.
>>
>> Analyzing the following from module's Makefile:
>>
>> all: $(src)/crypto/gmp.h $(src)/crypto/libgmp.a
>> @$(MAKE) -C $(KERNEL_BUILD) M=$(CURDIR) modules
>>
>> I thought maybe if i replace "modules" with "all", it might have the
>> same effect as what I suggested in case of SUBDIRS for kernel
>> Makefile.
>
> Where can I find the source for this module?
I am not sure what you mean by the source of the module? If you mean
source to the module Makefile then here it is:
---------------------------------------------
# kernel settings
KERNEL_RELEASE := $(shell uname -r)
KERNEL_BUILD := /lib/modules/$(KERNEL_RELEASE)/build
MOD_SUBDIR := misc
# GNU MP configuration
GMP_LIB := /usr/lib/libgmp.a
GMP_HEADER := /usr/include/gmp.h
# sources and objects
src ?= .
DIRS := . crypto <MODULE_NAME>
SRCS := $(foreach dir, $(DIRS), $(wildcard $(src)/$(dir)/*.c))
OBJS := $(patsubst %.c, %.o, $(SRCS))
SRCS += $(foreach dir, $(DIRS), $(wildcard $(src)/$(dir)/*.h))
DISTSRC := ./README ./AUTHORS ./ChangeLog ./Makefile $(SRCS)
DISTDIR :=
<MODULE_NAME>-$(VERSION_MAJOR).$(VERSION_MINOR)$(VERSION_SUFFIX)
# module settings
MODULE_NAME := <MODULE_NAME>
obj-m := $(MODULE_NAME).o
$(MODULE_NAME)-objs := $(patsubst $(src)/%.o, %.o, $(OBJS)) crypto/libgmp.a
# do not print "Entering directory ..."
MAKEFLAGS += --no-print-directory
EXTRA_CFLAGS += -Wall -Werror -DDEBUG -I$(src) -I$(src)/crypto
-I$(src)/<MODULE_NAME>
all: $(src)/crypto/gmp.h $(src)/crypto/libgmp.a
@$(MAKE) -C $(KERNEL_BUILD) M=$(CURDIR) all
clean:
@$(MAKE) -C $(KERNEL_BUILD) M=$(CURDIR) clean
rm -f $(src)/crypto/gmp.h $(src)/crypto/libgmp.a $(src)/Modules.symvers
install:
@$(MAKE) -C $(KERNEL_BUILD) M=$(CURDIR) modules_install
test -d /var/<MODULE_NAME> || mkdir /var/<MODULE_NAME>
test -c /dev/<MODULE_NAME> || mknod /dev/<MODULE_NAME> c 10 224
depmod -a
$(src)/crypto/libgmp.a:
test -e $(src)/crypto/libgmp.a || ln -s $(GMP_LIB)
$(src)/crypto/libgmp.a
# Note: We have to make sure that we use stack-based calling conventions
# when using GNU MP library functions
$(src)/crypto/gmp.h:
test -r $(src)/crypto/gmp.h || cat $(GMP_HEADER) | \
sed -e "s/\(__GMP_DECLSPEC [^e].*\);/\1 __attribute__
((regparm(0)));/" | \
sed -e "s/^int$$/int __attribute__ ((regparm(0)))/" | \
sed -e "s/^void$$/void __attribute__ ((regparm(0)))/" | \
sed -e "s/^size_t$$/size_t __attribute__ ((regparm(0)))/" | \
sed -e "s/^mp_limb_t$$/mp_limb_t __attribute__ ((regparm(0)))/"
| \
sed -e "s/^__GMP_EXTERN_INLINE void$$/__GMP_EXTERN_INLINE void
__attribute__ ((regparm(0)))/" | \
sed -e "s/^unsigned long$$/unsigned long __attribute__
((regparm(0)))/" | \
sed -e "s/\(.* (\*__gmp_allocate_func) .*\);/\1 __attribute__
((regparm(0)));/" | \
sed -e "s/\(.* (\*__gmp_reallocate_func) .*\);/\1 __attribute__
((regparm(0)));/" | \
sed -e "s/\(.* (\*__gmp_free_func) .*\);/\1 __attribute__
((regparm(0)));/" \
> $(src)/crypto/gmp.h
.PHONY: all clean install
------------------------------------------
>
>> Thanks
>
> cu
> Adrian
>
> --
>
> "Is there not promise of rain?" Ling Tan asked suddenly out
> of the darkness. There had been need of rain for many days.
> "Only a promise," Lao Er said.
> Pearl S. Buck - Dragon Seed
>
>
--
Shaz
--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to [EMAIL PROTECTED]
Please read the FAQ at http://kernelnewbies.org/FAQ