Hi, Fuxin Zhang
======= 2003-09-16 18:15:00 WROTE:=======
>To compile a module on mips,some compiler flags are required. An example:
> CFLAGS=
> "-I /usr/local/src/linux-mips/include/asm/gcc -D__KERNEL__
>-I/usr/local/src/linux-mips/include
>-Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fomit-frame-pointer
>-fno-strict-aliasing -fno-common
> -G 0 -mno-abicalls -fno-pic -mcpu=r4600 -mips2 -Wa,--trap -pipe
>-DMODULE -mlong-calls"
I have tried to change the compiler flags before.And I am not sure the
exact meaning of the "-mips2".I think it is related to our mips.When I
compile my mips-linux kernel,I used "-mcpu=sb1 " and our mips is
mips64 , but the kernel we use is linux for mips32, because I know linux
for mips64 doest not support kernel module yet(It is a trouble to me too).
One thing confused me is that with the flag "-mips2" or "-mips32", or
"-mips64", when I compiled my kernel module,it will get the following error :
______________________________________________________________________________________________
sch_example.c:80: warning: function declaration isn't a prototype
sch_example.c:92: warning: function declaration isn't a prototype
/tmp/ccxxm0Sw.s: Assembler messages:
/tmp/ccxxm0Sw.s:152: Error: opcode not supported on this processor: R6000
(MIPS2) `lld $3,8($6)'
/tmp/ccxxm0Sw.s:154: Error: opcode not supported on this processor: R6000
(MIPS2) `scd $2,8($6)'
/tmp/ccxxm0Sw.s:245: Error: opcode not supported on this processor: R6000
(MIPS2) `lld $4,8($6)'
/tmp/ccxxm0Sw.s:247: Error: opcode not supported on this processor: R6000
(MIPS2) `scd $3,8($6)'
________________________________________________________________________________________________
But when i removed that flags it will be compiled ok, of course it is still can
not work ok when i
try to "insmod".:)~
Any advice for me ?
>And you may have know that there are 2 different world of mips: big
>endian and little endian. When
>using cross compiler,you should choose the correct toolchain(often
>mipsel-xxx vs. mips-xxx).
>
Yes, I have noticed this before and my others simple kernel module can be
compiled and "insmod" ok. So i think it is the tq_timer or the queue_task
that arose the trouble as you said follow.
>But these normally lead to other errors, so again check for your kernel
>version about task queue data
>structures. (Does your toolchain's kernel headers consistent with the
>one running on mips?)
I have notice the change of the "struct tq_struct" .
But I am not sure whether the task queue is the best choice to be used here.
Because I know the evolution of "task queque-->tasklet-->softirq" . It seems
"task queque" is a obsolete way.Ha~, maybe I should try to learn how to use
tasklet or softirq.
Is it a right think ? What is your advice? And what should I do ?
As a newbie to the kernle module ,I am so so so confused.
Thank you again. You are an excellent Linux Man.
>
>Guangxing Zhang wrote:
>
>>Hi,
>>
>> Inspired by your advice , I have changed the method of preventing
>> the module
>>from being unloaded while "intrpt_routine" is still in the task queue.Now it
>>can freely
>>"insmod" and "rmmod" in my linux(2.4.18-3,not on mips) at any time.But
>>unfortunatlly,
>>When I port it to mips_linux, it get some errors as you can see in my mail to
>>linux-mips@linux-mips.org . It confuses me .Why? And what should I MUST pay
>>attention to
>>or what should I MUST learn if I I want to implement schedualing a function
>>to be called
>>on every timer interrupt.
>>
>> Thank you again and eagering your enthusiastic again!
>>
>>
>>======= 2003-09-16 13:17:00 WROTE:=======
>>
>>
>>
>>>Guangxing Zhang wrote:
>>>
>>>
>>>
>>>>Hi, Fuxin Zhang
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>>for any warnings. BTW, I don't the method you used to cleanup is safe,
>>>>>there maybe a task queued but not executed at the time you
>>>>>'rmmod',doesn't it?
>>>>>
>>>>>
>>>>>
>>>>>
>>>>Yes ,in http://www.faqs.org/docs/kernel/x1145.html#AEN1201 , it mentions
>>>>the
>>>>situation as you said.And just to overcoming it ,it use the sleep_on().But
>>>>as you
>>>>see, now it can not "rmmod" correctly and my linux will broke.
>>>>
>>>>As a newbie to kernel module ,I am not sure why and not know how to
>>>>scheduale a
>>>>function to be called on every timer interrupt or every seconds in kernle
>>>>module.
>>>>Eagering your help!
>>>>
>>>>
>>>>
>>>>
>>>>>>interrupt
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>Most ethernet adapter driver(e.g. drivers/net/eepro100.c) use timer,you
>>>can check them for examples.
>>>
>>>
>>>Have you check the sleep_on and wakeup routine's argument type? They
>>>should be wait_queue_head_t *
>>>for recent kernels?
>>>
>>>
>>
>>= = = = = = = = = = = = = = = = = = = =
>>
>>
>>
>> Guangxing Zhang
>> guangxing@ict.ac.cn
>> 2003-09-16
>>
>>
>>
>>
>>
>>
>>
= = = = = = = = = = = = = = = = = = = =
Guangxing Zhang
guangxing@ict.ac.cn
2003-09-17
|