Re: Linux Kernel contains only C code?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> On Fri, Jan 26, 2018 at 1:58 AM, inventsekar <inventsekar@xxxxxxxxx> wrote:
> Hi all, ...

>
1. May i know, other than C language, is there any other programming language is/are used inside Linux Kernel?!?!
>
is there any c++, Perl, python programs are used for peculiar tasks inside Linux Kernel?!?!

Well, let's find out ? If you open up a shell/terminal and change into the top level directory of your Linux kernel source and run the command below:

find . -type f -and -printf "%f\n" | grep -io '\.[^.]*$' | sort | uniq -c | sort -rn ( Breaking this down, find all files+get the filename+pull out the file extension+sort+only keep unique ext+sort with a stats count)

On my system with the kernel source for Linux-4.15 it shows me what's below... keep in mind this is the number of 'unique' file extension types in the kernel source tree. It's long but please keep scrolling all the way there is useful stuff at the bottom.
25965 .c
 20363 .h
   4074 .txt
   1470 .S
   1437 .dts
   1098 .dtsi
    827 .rst
    211 .gitignore
    207 .json
    200 .sh
     75 .py
     59 .cocci
     57 .svg
     49 .boot
     42 .tc
     39 .pl
     36 .config
     31 .debug
     19 .lds
     15 .conf
     14 .ppm
     14 .fuc
     12 .fuc3
     10 .exceptions
      9 .y
      9 .h_shipped
      9 .c_shipped
      9 .awk
      8 .scr
      8 .l
      8 .html
      8 .dot
      8 .8
      8 .1
      7 .sa
      7 .in
      6 .cpp
      6 .asn1
      5 .xsl
      5 .uc
      5 .po
      5 .inc
      5 .fuc5
      5 .cpu
      4 .tbl
      4 .S_shipped
      4 .map
      4 .ld
      4 .include
      4 .fail
      4 .doc
      3 .smp_defconfig
      3 .pm
      3 .mk
      3 .gdbinit
      3 .csv
      3 .am
      2 .up_defconfig
      2 .um
      2 .ubsan
      2 .seq
      2 .rules
      2 .reg
      2 .powerpc
      2 .postlink
      2 .platforms
      2 .platform
      2 .pbm
      2 .nommu
      2 .megaraid
      2 .kasan
      2 .inl
      2 .inf
      2 .ids
      2 .fax
      2 .FAQ
      2 .build
      2 .arm
      1 .xs
      1 .x86
      1 .x25
      1 .wimax
      1 .WARNING
      1 .vringh
      1 .vim
      1 .vdec2_defconfig
      1 .vdec2
      1 .uni
      1 .txtd
      1 .tex
      1 .syncppp
      1 .sym53c8xx_2
      1 .sym53c8xx
      1 .SRC
      1 .soc
      1 .smp
      1 .select-break
      1 .sed
      1 .script
      1 .sb1000
      1 .rest
      1 .recursion-issue-02
      1 .recursion-issue-01
      1 .readme
      1 .README
      1 .qlge
      1 .qlcnic
      1 .qla4xxx
      1 .qla3xxx
      1 .qla2xxx
      1 .preempt
      1 .PL
      1 .perf
      1 .pass
      1 .ore
      1 .opsp_defconfig
      1 .normal
      1 .nommu_defconfig
      1 .netlink
      1 .net
      1 .ncr53c8xx
      1 .modsign
      1 .modpost
      1 .modinst
      1 .modes
      1 .modbuiltin
      1 .mm
      1 .mISDN
      1 .mips
      1 .megaraid_sas
      1 .md
      1 .mak
      1 .mailmap
      1 .machine
      1 .lpfc
      1 .loopback
      1 .locks
      1 .Locking
      1 .libfdt
      1 .lib
      1 .LIB
      1 .kgdb
      1 .kcov
      1 .ipw2200
      1 .ipw2100
      1 .ips
      1 .iosched
      1 .inc_shipped
      1 .ignore
      1 .i2400m
      1 .hz
      1 .hysdn
      1 .hp300
      1 .host
      1 .HiSax
      1 .hfc-pci
      1 .hex
      1 .headersinst
      1 .glade
      1 .gitattributes
      1 .gigaset
      1 .gif
      1 .generic
      1 .gdbinit_400MHz_32MB
      1 .gdbinit_300MHz_32MB
      1 .gdbinit_200MHz_16MB
      1 .gcc-plugins
      1 .gate
      1 .fuc4
      1 .fuc0s
      1 .freezer
      1 .FPE
      1 .FlashPoint
      1 .feature
      1 .extrawarn
      1 .example
      1 .dtc
      1 .dtbinst
      1 .DOC
      1 .diversion
      1 .dino
      1 .devices
      1 .default
      1 .def
      1 .DAC960
      1 .cycladesZ
      1 .css
      1 .cputype
      1 .copyright
      1 .concap
      1 .common
      1 .cocciconfig
      1 .clean
      1 .checkpatch
      1 .char
      1 .ChangeLog
      1 .cfg
      1 .cert
      1 .cc
      1 .CAPI
      1 .cache
      1 .bus
      1 .buddha
      1 .binfmt
      1 .bc
      1 .avmb1
      1 .audio
      1 .asm-generic
      1 .asm
      1 .arcmsr
      1 .arch
      1 .aic7xxx
      1 .aic79xx
      1 .agh
      1 .ac
      1 .1996-2002
      1 .1995-2002
      1 .1994-2004
      1 .1992-1997
      1 .

Somethings are obvious like we have :

25965 .c files
20363 .h files
4074 .txt files and 
1470 .S
files.

Somethings are not so obvious like what could possibly be a *.y file or *.tc file ? If you type in find -name "*.y" in my case i see:

aruna@debian:~/linux-4.15$ find -name "*.y"
./drivers/scsi/aic7xxx/aicasm/aicasm_macro_gram.y
./drivers/scsi/aic7xxx/aicasm/aicasm_gram.y
./tools/perf/util/expr.y
./tools/perf/util/pmu.y
./tools/perf/util/parse-events.y
./tools/bpf/bpf_exp.y
./scripts/dtc/dtc-parser.y
./scripts/genksyms/parse.y
./scripts/kconfig/zconf.y

Now if I pass that to the 'file' command ...

aruna@debian:~/linux-4.15$ file `find -name "*.y"` // yes you need those back ticks :)

./drivers/scsi/aic7xxx/aicasm/aicasm_macro_gram.y: C source, ASCII text
./drivers/scsi/aic7xxx/aicasm/aicasm_gram.y:       C source, ASCII text
./tools/perf/util/expr.y:                          C source, ASCII text
./tools/perf/util/pmu.y:                            C source, ASCII text
./tools/perf/util/parse-events.y:                   C source, ASCII text
./tools/bpf/bpf_exp.y:                           C source, ASCII text
./scripts/dtc/dtc-parser.y:                       C source, ASCII text
./scripts/genksyms/parse.y:                         C source, ASCII text
./scripts/kconfig/zconf.y:                          C source, ASCII text

So 'file' tells us these are C program files ? Lets verify ? If you 'cat' any of these files you will see it is actual C code. Why does it have a file extension of .y ?
Valdis or Gregkh may be able to shed some light on that I have no idea :)

Now we do the exact same thing for *.tc files.

aruna@debian:~/linux-4.15$ find -name "*.tc"

<snip>
./tools/testing/selftests/ftrace/test.d/00basic/basic3.tc
./tools/testing/selftests/ftrace/test.d/00basic/basic4.tc
<snip>

and pass this to 'file' and we see.. they seem to be shell scripts ?

aruna@debian:~/linux-4.15$ file `find -name "*.tc"`

<snip>
./tools/testing/selftests/ftrace/test.d/00basic/basic3.tc:                  POSIX shell script, ASCII text executable
./tools/testing/selftests/ftrace/test.d/00basic/basic4.tc:                  POSIX shell script, ASCII text executable
<snip>

So let's verify again ? By running -->aruna@debian:~/linux-4.15$ cat ./tools/testing/selftests/ftrace/test.d/00basic/basic4.tc

and we see they are shell scripts.

#!/bin/sh
# description: Basic event tracing check
test -f available_events -a -f set_event -a -d events
# check scheduler events are available
grep -q sched available_events && exit_pass || exit_fail

There are many 'interesting' things hidden away down the kernel source rabbit hole. So explore with a child's curiosity, have lot's of patience and wash +rinse+repeat as necessary.

Good luck !

Aruna ( to those who are long time kernel hackers and veterans my humble apologies but I felt this was needed.. )









 
 



>
2. I believe some assembly language and shell scripting also used.. how can I check them? Can you point me which part of the source code contains the assembly and shell scripting




Best regards
Sekar

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxg
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]

  Powered by Linux