вроде как @ZAZ-965 компетентен на эту тему. Вот только давно его не видно и @Алексей.А так же не виден
Может на habr q&a есть эксперты или на linux.org.ru? На последнем мне отвечали по делу, то что другие не знали ввиду отсутствия опыта.
Ищу пока, пробую. Вот решил отвлечься и пробую компилятор на самой плате... (все /bin; /usr и прочее примонтированы с SD карты и впаянную K9F2G08U0M PBIO на плате своей работой не затрагивают). Компилятор (указанный в теме ранее "mini-native-armv5l") установлен (скопированы файлы) прямо на SD в директории (которые прмонтированы вместо) /bin; /etc; /usr и др. Вот этот код: Код (C++): #include <stdio.h> int main(int argc, char **argv) { int cnt=0; printf("TEST!!!\n"); // while(cnt < 100) { printf("cnt: %i\n", cnt); cnt++; } return 0; } А Makefile с помощью бубна и матери: Код (Bash): ########################### # Simple Generic Makefile # ########################### CC := /usr/bin/gcc LD := /usr/bin/ld AS := /usr/bin/as INC := -I/usr/include:/usr/gcc/include/ LIB := -L/usr/lib/:/usr/gcc/lib/ CFLAGS := -c -Wall -O2 -v LDFLAGS := --entry main --verbose SOURCES := $(shell ls *.c) OBJECTS := $(SOURCES:.c=.o) EXECUTABLE := test all: $(EXECUTABLE) $(OBJECTS): $(SOURCES) $(CC) $(INC) $(LIB) $(CFLAGS) $< -o $@ $(EXECUTABLE): $(OBJECTS) $(CC) $(INC) $(LIB) $(LDFLAGS) $< -o $@ #install: # install -m 0755 $(EXECUTABLE) $(HOME)/local/bin clean: rm -rf *o $(EXECUTABLE) Он конечно с мусором (учусь). А это выхлоп сборки прямо на плате: Код (Text): $ make /usr/bin/gcc -I/usr/include:/usr/gcc/include/ -L/usr/lib/:/usr/gcc/lib/ -c -Wall -O2 -v main.c -o main.o Invoked as /usr/bin/gcc Reference path: /usr/bin/.. arg[ 0] = rawgcc arg[ 1] = -nostdinc arg[ 2] = -isystem arg[ 3] = /usr/bin/../include arg[ 4] = -isystem arg[ 5] = /usr/bin/../gcc/include arg[ 6] = -U__nptl__ arg[ 7] = -I/usr/include:/usr/gcc/include/ arg[ 8] = -c arg[ 9] = -Wall arg[10] = -O2 arg[11] = -v arg[12] = main.c arg[13] = -o arg[14] = main.o Using built-in specs. Target: armv5l-unknown-linux Configured with: /home/landley/firmware-0.9.6/build/temp-armv5l/gcc-core/configure --prefix=/home/landley/firmware-0.9.6/build/mini-native-armv5l/usr --disable-multilib --build=x86_64-walrus-linux --host=armv5l-unknown-linux --target=armv5l-unknown-linux --enable-long-long --enable-c99 --enable-shared --enable-threads=posix --enable-__cxa_atexit --disable-nls --enable-languages=c,c++ --disable-libstdcxx-pch --enable-sjlj-exceptions --program-prefix= Thread model: posix gcc version 4.1.2 /usr/bin/../libexec/gcc/armv5l-unknown-linux/4.1.2/cc1 -quiet -nostdinc -v -I/usr/include:/usr/gcc/include/ -iprefix /usr/bin/../lib/gcc/armv5l-unknown-linux/4.1.2/ -U__nptl__ -isystem /usr/bin/../include -isystem /usr/bin/../gcc/include main.c -quiet -dumpbase main.c -auxbase-strip main.o -O2 -Wall -version -o /tmp/ccSLRjqe.s ignoring nonexistent directory "/usr/include:/usr/gcc/include/" #include "..." search starts here: #include <...> search starts here: /usr/bin/../include /usr/bin/../gcc/include End of search list. GNU C version 4.1.2 (armv5l-unknown-linux) compiled by GNU C version 4.1.2. GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 Compiler executable checksum: 9a27050f6b5917e84071393dd7232b86 as -o main.o /tmp/ccSLRjqe.s /usr/bin/gcc -I/usr/include:/usr/gcc/include/ -L/usr/lib/:/usr/gcc/lib/ --entry main --verbose main.o -o test Using built-in specs. Target: armv5l-unknown-linux Configured with: /home/landley/firmware-0.9.6/build/temp-armv5l/gcc-core/configure --prefix=/home/landley/firmware-0.9.6/build/mini-native-armv5l/usr --disable-multilib --build=x86_64-walrus-linux --host=armv5l-unknown-linux --target=armv5l-unknown-linux --enable-long-long --enable-c99 --enable-shared --enable-threads=posix --enable-__cxa_atexit --disable-nls --enable-languages=c,c++ --disable-libstdcxx-pch --enable-sjlj-exceptions --program-prefix= Thread model: posix gcc version 4.1.2 /usr/bin/../libexec/gcc/armv5l-unknown-linux/4.1.2/collect2 --eh-frame-hdr -dynamic-linker /lib/ld-linux.so.2 -X -m armelf_linux -p -o test -e main -L/usr/lib/:/usr/gcc/lib/ -L/usr/bin/../lib -L/usr/bin/../gcc/lib --dynamic-linker /lib/ld-uClibc.so.0 -rpath-link /usr/bin/../lib /usr/bin/../lib/crti.o /usr/bin/../gcc/lib/crtbegin.o /usr/bin/../lib/crt1.o main.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/bin/../gcc/lib/crtend.o /usr/bin/../lib/crtn.o И вот запуск: Код (C++): -bash-3.2$ ./test TEST!!! cnt: 0 cnt: 1 cnt: 2 cnt: 3 cnt: 4 cnt: 5 cnt: 6 cnt: 7 cnt: 8 cnt: 9 cnt: 10 cnt: 11 cnt: 12 cnt: 13 cnt: 14 cnt: 15 cnt: 16 cnt: 17 cnt: 18 cnt: 19 cnt: 20 cnt: 21 cnt: 22 ... ... ... cnt: 82 cnt: 83 cnt: 84 cnt: 85 cnt: 86 cnt: 87 cnt: 88 cnt: 89 cnt: 90 cnt: 91 cnt: 92 cnt: 93 cnt: 94 cnt: 95 cnt: 96 cnt: 97 cnt: 98 cnt: 99 -bash-3.2$ Компиляция на плате работает! Даже "mc" взятый от MOXA в действии. Надо только ко всему привыкнуть и научится собирать драйверы.
А вот это испытание клиента MySql в реальных условиях прямо на работе (вместо перекура). База не имеет для производсва важных и секретных данных. Клиент MySql взят от MOXA - ранее давал ссылку. Вот: Код (Text): -bash-3.2$ mysql -u abp -pabp -h 192.168.0.234 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 204548 to server version: 5.5.5-10.1.48-MariaDB-0+deb9u2 No entry for terminal type "xterm"; using dumb terminal settings. Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> show databases; +--------------------+ | Database | +--------------------+ | abp_db | | catserver_db | | information_schema | | mychat | +--------------------+ 4 rows in set (0.03 sec) mysql> use catserver_db; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +------------------------+ | Tables_in_catserver_db | +------------------------+ | datas | | settings | | test | +------------------------+ 3 rows in set (0.00 sec) mysql> select * from settings; +-----+--------+-----------+----------+--------+-------+-----+-----+------+---+--------+-----------+----+-------+------+ | prc | chckon | chckvalue | chckmode | SetErr | Cntrl | Usp | Upp | U | I | enable | AutoCntrl | id | NumCh | mode | +-----+--------+-----------+----------+--------+-------+-----+-----+------+---+--------+-----------+----+-------+------+ | 1 | 1 | 1 | 1 | 0.1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | | 1 | 1 | 1 | 1 | 0.1 | 0 | 2 | 2 | 2 | 1 | 0 | 0 | 2 | 2 | 3 | | 1 | 1 | 1 | 1 | 0.1 | 0 | 3 | 3 | 7.49 | 4 | 0 | 0 | 3 | 3 | 0 | | 1 | 1 | 1 | 1 | 0.1 | 1 | 4 | 4 | 4 | 2 | 0 | 1 | 4 | 4 | 0 | | 1 | 1 | 1 | 1 | 0.1 | 0 | -2 | -2 | 5 | 1 | 0 | 0 | 5 | 5 | 3 | | 1 | 1 | 1 | 1 | 0.1 | 1 | 6 | 6 | 6 | 5 | 0 | 1 | 6 | 6 | 0 | | 0 | 1 | 1 | 1 | 0.1 | 0 | 7 | 7 | 7 | 7 | 0 | 0 | 7 | 7 | 0 | | 1 | 1 | 1 | 1 | 0.1 | 0 | 8 | 8 | 8 | 6 | 0 | 0 | 8 | 8 | 0 | | 1 | 1 | 1 | 1 | 0.1 | 0 | 9 | 9 | 9 | 6 | 0 | 0 | 9 | 9 | 0 | | 0 | 1 | 1 | 1 | 0.1 | 0 | 10 | 10 | 1 | 1 | 0 | 0 | 10 | 10 | 0 | | 1 | 1 | 1 | 1 | 0.1 | 0 | 11 | 1 | 1 | 1 | 0 | 0 | 11 | 11 | 0 | | 1 | 1 | 1 | 1 | 0.1 | 1 | 12 | 12 | 1 | 8 | 0 | 1 | 12 | 12 | 0 | +-----+--------+-----------+----------+--------+-------+-----+-----+------+---+--------+-----------+----+-------+------+ 12 rows in set (0.00 sec) mysql>
Нао что-то делать. И где взять linux-headers-2.6.27 ??? Пытаюсь... скачал linux-2.6.27.tar.bz2, распаковал, и мучаюсь... вот: Код (Text): kto@debian:~/Загрузки/at91sam9260_Linux_board/linux-2.6.27$ make autoconfig Makefile:442: *** mixed implicit and normal rules: deprecated syntax Makefile:1601: *** mixed implicit and normal rules: deprecated syntax make: *** Нет правила для сборки цели «autoconfig». Останов. kto@debian:~/Загрузки/at91sam9260_Linux_board/linux-2.6.27$ make menuconfig Makefile:442: *** mixed implicit and normal rules: deprecated syntax Makefile:1601: *** mixed implicit and normal rules: deprecated syntax make: *** Нет правила для сборки цели «menuconfig». Останов. kto@debian:~/Загрузки/at91sam9260_Linux_board/linux-2.6.27$ make at91sam9260dfc_defconfig Makefile:442: *** mixed implicit and normal rules: deprecated syntax Makefile:1601: *** mixed implicit and normal rules: deprecated syntax make: *** Нет правила для сборки цели «at91sam9260dfc_defconfig». Останов. kto@debian:~/Загрузки/at91sam9260_Linux_board/linux-2.6.27$ Интересно, в чём дело? Ведь надо linux-headers-2.6.27 получить, что бы делать модули... но как получить? А это: Код (Text): bash-3.2# bash-3.2# make headers_install INSTALL_HDR_PATH=/usr/src/linux-headers-2.6.27 TARGET=at91 sh: set: -e: invalid option sh: set: -e: invalid option sh: set: -e: invalid option sh: set: -e: invalid option sh: set: -e: invalid option sh: set: -e: invalid option sh: set: -e: invalid option sh: set: -e: invalid option sh: set: -e: invalid option sh: set: -e: invalid option sh: set: -e: invalid option sh: set: -e: invalid option sh: set: -e: invalid option sh: set: -e: invalid option sh: set: -e: invalid option sh: set: -e: invalid option sh: set: -e: invalid option sh: set: -e: invalid option sh: set: -e: invalid option CHK include/linux/version.h sh: set: -e: invalid option sh: set: -e: invalid option HOSTCC scripts/basic/fixdep rawgcc: /bin/../gcc/lib/crtbegin.o: No such file or directory rawgcc: /bin/../gcc/lib/crtend.o: No such file or directory scripts/basic/fixdep.c:107:23: error: no include path in which to search for sys/types.h scripts/basic/fixdep.c:108:22: error: no include path in which to search for sys/stat.h scripts/basic/fixdep.c:109:22: error: no include path in which to search for sys/mman.h scripts/basic/fixdep.c:110:20: error: no include path in which to search for unistd.h scripts/basic/fixdep.c:111:19: error: no include path in which to search for fcntl.h scripts/basic/fixdep.c:112:20: error: no include path in which to search for string.h .... бррезано - шипко много .... cripts/unifdef.c:919: warning: implicit declaration of function 'printf' scripts/unifdef.c:919: warning: incompatible implicit declaration of built-in function 'printf' scripts/unifdef.c:924: error: too many arguments to function 'strlcmp' scripts/unifdef.c: At top level: scripts/unifdef.c:937: error: expected ')' before 'ignorethis' scripts/unifdef.c:971: error: expected declaration specifiers or '...' before 'size_t' scripts/unifdef.c: In function 'strlcmp': scripts/unifdef.c:973: error: 'n' undeclared (first use in this function) scripts/unifdef.c: In function 'debug': scripts/unifdef.c:987: error: 'va_list' undeclared (first use in this function) scripts/unifdef.c:987: error: expected ';' before 'ap' scripts/unifdef.c:989: error: 'debugging' undeclared (first use in this function) scripts/unifdef.c:990: warning: implicit declaration of function 'va_start' scripts/unifdef.c:990: error: 'ap' undeclared (first use in this function) scripts/unifdef.c:991: warning: implicit declaration of function 'vwarnx' scripts/unifdef.c:992: warning: implicit declaration of function 'va_end' scripts/unifdef.c: In function 'error': scripts/unifdef.c:1000: warning: implicit declaration of function 'warnx' sh: can't execute 'scripts/basic/fixdep': No such file or directory sh: set: -e: invalid option bash-3.2# производил прямо на плате - там все директории на SD-карте. Что делать? Может знает кто?
Вот наткнулся: Код (Bash): make ARCH=${ARCH} INSTALL_HDR_PATH=${SYSROOT}/usr headers_install Тут валялось скачанное ядро (исходники) linux-at91-wilc_15_4_1 пробую сгенерировать заголовочные файлы - отлично! Вот: Код (Bash): kto@debian:/usr/src/linux-headers# ls include kto@debian:/usr/src/linux-headers# cd include kto@debian:/usr/src/linux-headers/include# ls asm asm-generic drm linux misc mtd rdma scsi sound video xen kto@debian:/usr/src/linux-headers/include# Пробую родное скачанное ядро (исходники 2.6.27): Код (C++): kto@debian:~/Загрузки/at91sam9260_Linux_board/linux-2.6.27$ make ARCH=arm INSTALL_HDR_PATH=/usr/src/linux-headers-2.6.27 headers_install Makefile:1601: *** mixed implicit and normal rules: deprecated syntax CHK include/linux/version.h HOSTCC scripts/unifdef scripts/unifdef.c:209:25: error: conflicting types for ‘getline’ static Linetype getline(void); ^ In file included from scripts/unifdef.c:70:0: /usr/include/stdio.h:678:20: note: previous declaration of ‘getline’ was here extern _IO_ssize_t getline (char **__restrict __lineptr, ^ scripts/Makefile.host:118: ошибка выполнения рецепта для цели «scripts/unifdef» make[1]: *** [scripts/unifdef] Ошибка 1 Makefile:1054: ошибка выполнения рецепта для цели «__headers» make: *** [__headers] Ошибка 2 kto@debian:~/Загрузки/at91sam9260_Linux_board/linux-2.6.27# Как видно полная задница. Что-то где-то криво! Наверное надо поискать по ветке... дома скачанное (исходники) 2.6.27.10 ..... жду времени прибытия домой. Ещё 1,5 часа и дороги с час.
Бьюсь как рыба... Подсказал бы кто! Ни кросс компиляцией, ни на плате ничего не выходит. и такой Makefile: Код (Bash): obj-m += lkm_example.o all: make ARCH=armv5t CROSS_COMPILE=arm-linux-gnueabi- -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean и такой: Код (Bash): CC := /usr/bin/gcc LD := /usr/bin/ld AS := /usr/bin/as INC := -I/home/igor/tmp/tmp2/head/include -I/home/igor/tmp/tmp2/linux-at91-wilc_15_4_1/include/ LIB := #-L/usr/lib/:/usr/gcc/lib/ KERNEL_SOURCE := /usr/src/linux-2.6.27.10 PWD := $(shell pwd) CFLAGS := -Wall -DMODULE -D__KERNEL__ -D_LINUX -v LDFLAGS := --verbose TARGET := testmod obj-m := $(TARGET) testmod.o: main.c $(CC) $(INC) $(CFLAGS) main.c И пути всякие... как локальные с LINUX-HEADERS и в /usr/src, куда клал и исходники и заголовки - облом Там то одного файла нет, то другого. Да где взять это хренов linux-headers... или как его сделать и версии разные пробовал... для локальной машины всё компилица. Для ARM совсем ни как... ни кросс компилятором, ни на плате. Я бы понял если после сборки не та версия при загрузке, но ведь просто сборка не идёт ни в какую!
Так где? Всё перерыл до чего дотянулся. И на виртуальной машине ставил кросс компилятор и по разному. А на форумах встречал только сбору для PC. Поисковик тыкаю носом, что надо для ARM! А попадаю только для PC или разговоры чисто ругательные.
Но ведь чужой пример не могу собрать: Код (C++): #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> MODULE_LICENSE("GPL"); MODULE_AUTHOR("Robert W. Oliver II"); MODULE_DESCRIPTION("A simple example Linux module."); MODULE_VERSION("0.01"); static int __init lkm_example_init(void) { printk(KERN_INFO "Hello, World!\n"); return 0; } static void __exit lkm_example_exit(void) { printk(KERN_INFO "Goodbye, World!\n"); } module_init(lkm_example_init); module_exit(lkm_example_exit);
Вот: Код (Bash): root@DebTool:/home/igor/coding/My_AT91SAM9260_board/testmod# make make ARCH=armv5t CROSS_COMPILE=arm-linux-gnueabi- -C /lib/modules/4.9.0-16-686/build M=/home/igor/coding/My_AT91SAM9260_board/testmod modules make[1]: вход в каталог «/usr/src/linux-headers-4.9.0-16-686» CC [M] /home/igor/coding/My_AT91SAM9260_board/testmod/lkm_example.o arm-linux-gnueabi-gcc-6: error: unrecognized argument in option ‘-march=i686’ arm-linux-gnueabi-gcc-6: note: valid arguments to ‘-march=’ are: armv2 armv2a armv3 armv3m armv4 armv4t armv5 armv5e armv5t armv5te armv6 armv6-m armv6j armv6k armv6kz armv6s-m armv6t2 armv6z armv6zk armv7 armv7-a armv7-m armv7-r armv7e-m armv7ve armv8-a armv8-a+crc armv8.1-a armv8.1-a+crc iwmmxt iwmmxt2 native arm-linux-gnueabi-gcc-6: error: unrecognized command line option ‘-mno-sse’; did you mean ‘-fno-dse’? arm-linux-gnueabi-gcc-6: error: unrecognized command line option ‘-mno-mmx’ arm-linux-gnueabi-gcc-6: error: unrecognized command line option ‘-mno-sse2’; did you mean ‘-fno-dse’? arm-linux-gnueabi-gcc-6: error: unrecognized command line option ‘-mno-3dnow’; did you mean ‘-fno-doc’? arm-linux-gnueabi-gcc-6: error: unrecognized command line option ‘-mregparm=3’; did you mean ‘-march=armv3’? /usr/src/linux-headers-4.9.0-16-common/scripts/Makefile.build:318: ошибка выполнения рецепта для цели «/home/igor/coding/My_AT91SAM9260_board/testmod/lkm_example.o» make[4]: *** [/home/igor/coding/My_AT91SAM9260_board/testmod/lkm_example.o] Ошибка 1 /usr/src/linux-headers-4.9.0-16-common/Makefile:1561: ошибка выполнения рецепта для цели «_module_/home/igor/coding/My_AT91SAM9260_board/testmod» make[3]: *** [_module_/home/igor/coding/My_AT91SAM9260_board/testmod] Ошибка 2 Makefile:152: ошибка выполнения рецепта для цели «sub-make» make[2]: *** [sub-make] Ошибка 2 Makefile:8: ошибка выполнения рецепта для цели «all» make[1]: *** [all] Ошибка 2 make[1]: выход из каталога «/usr/src/linux-headers-4.9.0-16-686» Makefile:5: ошибка выполнения рецепта для цели «all» make: *** [all] Ошибка 2 А путь /lib/modules/2.6.27/build не могу сделать, потому как он линк на /usr/src/linux-htaders-2.6.27 который не могу сделать, хотя делал, но там кроме include есть и скрипы.
вот пробую: Код (Bash): igor@DebTool:~/coding/My_AT91SAM9260_board/testmod$ make arm-linux-gnueabi-gcc -Wall -DMODULE -D__KERNEL__ -DLINUX -v -I/usr/src/linux-kernel/include -c lkm_example.c Using built-in specs. COLLECT_GCC=arm-linux-gnueabi-gcc Target: arm-linux-gnueabi Configured with: ../src/configure -v --with-pkgversion='Debian 6.3.0-18' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-6 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --enable-plugin --enable-default-pie --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-armel-cross/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-armel-cross --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-armel-cross --with-arch-directory=arm --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libgcj --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-sjlj-exceptions --with-arch=armv4t --with-float=soft --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=arm-linux-gnueabi --program-prefix=arm-linux-gnueabi- --includedir=/usr/arm-linux-gnueabi/include Thread model: posix gcc version 6.3.0 20170516 (Debian 6.3.0-18) COLLECT_GCC_OPTIONS='-Wall' '-D' 'MODULE' '-D' '__KERNEL__' '-D' 'LINUX' '-v' '-I' '/usr/src/linux-kernel/include' '-c' '-march=armv4t' '-mfloat-abi=soft' '-mtls-dialect=gnu' /usr/lib/gcc-cross/arm-linux-gnueabi/6/cc1 -quiet -v -I /usr/src/linux-kernel/include -imultilib . -imultiarch arm-linux-gnueabi -D MODULE -D __KERNEL__ -D LINUX lkm_example.c -quiet -dumpbase lkm_example.c -march=armv4t -mfloat-abi=soft -mtls-dialect=gnu -auxbase lkm_example -Wall -version -o /tmp/ccNmy2rH.s GNU C11 (Debian 6.3.0-18) version 6.3.0 20170516 (arm-linux-gnueabi) compiled by GNU C version 6.3.0 20170516, GMP version 6.1.2, MPFR version 3.1.5, MPC version 1.0.3, isl version 0.15 GGC heuristics: --param ggc-min-expand=98 --param ggc-min-heapsize=128655 ignoring nonexistent directory "/usr/local/include/arm-linux-gnueabi" ignoring nonexistent directory "/usr/include/arm-linux-gnueabi" ignoring nonexistent directory "/usr/src/linux-kernel/include" #include "..." search starts here: #include <...> search starts here: /usr/lib/gcc-cross/arm-linux-gnueabi/6/include /usr/lib/gcc-cross/arm-linux-gnueabi/6/include-fixed /usr/lib/gcc-cross/arm-linux-gnueabi/6/../../../../arm-linux-gnueabi/include /usr/include End of search list. GNU C11 (Debian 6.3.0-18) version 6.3.0 20170516 (arm-linux-gnueabi) compiled by GNU C version 6.3.0 20170516, GMP version 6.1.2, MPFR version 3.1.5, MPC version 1.0.3, isl version 0.15 GGC heuristics: --param ggc-min-expand=98 --param ggc-min-heapsize=128655 Compiler executable checksum: 98cf8fba2b5ed54b1eab753188c32fd6 lkm_example.c:3:24: fatal error: linux/init.h: Нет такого файла или каталога #include <linux/init.h> ^ compilation terminated. Makefile:16: ошибка выполнения рецепта для цели «lkm_example.o» make: *** [lkm_example.o] Ошибка 1 igor@DebTool:~/coding/My_AT91SAM9260_board/testmod$ Какого дьявола нет файла? Если делал так, как указано: Код (Bash): cd linux-3.9 make mrproper make ARCH=arm integrator_defconfig make ARCH=arm headers_check make ARCH=arm INSTALL_HDR_PATH=$SOMEWHERE headers_install в результате заголовочные (мои): Код (Text): root@DebTool:/home/igor/coding/My_AT91SAM9260_board/linux-at91-wilc_15_4_1# ls -al /usr/src/linux-headers итого 12 drwxr-xr-x 3 root root 4096 авг 7 17:18 . drwxr-xr-x 7 root root 4096 авг 7 17:18 .. drwxr-xr-x 13 root root 4096 авг 7 17:17 include root@DebTool:/home/igor/coding/My_AT91SAM9260_board/linux-at91-wilc_15_4_1# ^C root@DebTool:/home/igor/coding/My_AT91SAM9260_board/linux-at91-wilc_15_4_1# А вот казённые (родные от системы), с которыми всё нормально: Код (Text): root@DebTool:/home/igor/coding/My_AT91SAM9260_board/linux-at91-wilc_15_4_1# ls -al /usr/src/linux-headers-4.9.0-16-common итого 80 drwxr-xr-x 4 root root 4096 авг 1 12:32 . drwxr-xr-x 7 root root 4096 авг 7 17:18 .. drwxr-xr-x 13 root root 4096 авг 1 12:31 arch drwxr-xr-x 28 root root 4096 авг 1 12:32 include -rw-r--r-- 1 root root 61731 июл 19 23:08 Makefile lrwxrwxrwx 1 root root 34 июл 19 23:08 scripts -> ../../lib/linux-kbuild-4.9/scripts root@DebTool:/home/igor/coding/My_AT91SAM9260_board/linux-at91-wilc_15_4_1# Мои не полные. Интересно, а что ещё надо сделать? Может упустил что?
Код (Bash): root@DebTool:/home/igor/coding/My_AT91SAM9260_board/testmod# make make ARCH=armv5t CROSS_COMPILE=arm-linux-gnueabi- -C /lib/modules/4.9.0-16-686/build M=/home/igor/coding/My_AT91SAM9260_board/testmod modules make[1]: вход в каталог «/usr/src/linux-headers-4.9.0-16-686» CC [M] /home/igor/coding/My_AT91SAM9260_board/testmod/lkm_example.o arm-linux-gnueabi-gcc-6: error: unrecognized argument in option ‘-march=i686’ Оно ругается на то, что при уже выбранной архитектуре ARCH=armv5t машинных кодов в makefile в папке build есть опция march=i686, означающая сборку под вообще другую архитектуру. Но ведь собирают же люди под какую-нибудь машинку, а ваш "Arm с внешней шиной данных" только версией ARM отличается.
Вот другой выхлоп на виртуальной машине: Код (Text): igor@DebTool:~/coding/My_AT91SAM9260_board/testmod$ make arm-linux-gnueabi-gcc -Wall -DMODULE -D__KERNEL__ -DLINUX -v -I/usr/src/linux-headers/include -I/usr/src/linux-at91-wilc_15_4_1/include lkm_example.c Using built-in specs. COLLECT_GCC=arm-linux-gnueabi-gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabi/6/lto-wrapper Target: arm-linux-gnueabi Configured with: ../src/configure -v --with-pkgversion='Debian 6.3.0-18' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-6 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --enable-plugin --enable-default-pie --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-armel-cross/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-armel-cross --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-armel-cross --with-arch-directory=arm --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libgcj --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-sjlj-exceptions --with-arch=armv4t --with-float=soft --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=arm-linux-gnueabi --program-prefix=arm-linux-gnueabi- --includedir=/usr/arm-linux-gnueabi/include Thread model: posix gcc version 6.3.0 20170516 (Debian 6.3.0-18) COLLECT_GCC_OPTIONS='-Wall' '-D' 'MODULE' '-D' '__KERNEL__' '-D' 'LINUX' '-v' '-I' '/usr/src/linux-headers/include' '-I' '/usr/src/linux-at91-wilc_15_4_1/include' '-march=armv4t' '-mfloat-abi=soft' '-mtls-dialect=gnu' /usr/lib/gcc-cross/arm-linux-gnueabi/6/cc1 -quiet -v -I /usr/src/linux-headers/include -I /usr/src/linux-at91-wilc_15_4_1/include -imultilib . -imultiarch arm-linux-gnueabi -D MODULE -D __KERNEL__ -D LINUX lkm_example.c -quiet -dumpbase lkm_example.c -march=armv4t -mfloat-abi=soft -mtls-dialect=gnu -auxbase lkm_example -Wall -version -o /tmp/ccc1eKWw.s GNU C11 (Debian 6.3.0-18) version 6.3.0 20170516 (arm-linux-gnueabi) compiled by GNU C version 6.3.0 20170516, GMP version 6.1.2, MPFR version 3.1.5, MPC version 1.0.3, isl version 0.15 GGC heuristics: --param ggc-min-expand=98 --param ggc-min-heapsize=128627 ignoring nonexistent directory "/usr/local/include/arm-linux-gnueabi" ignoring nonexistent directory "/usr/include/arm-linux-gnueabi" #include "..." search starts here: #include <...> search starts here: /usr/src/linux-headers/include /usr/src/linux-at91-wilc_15_4_1/include /usr/lib/gcc-cross/arm-linux-gnueabi/6/include /usr/lib/gcc-cross/arm-linux-gnueabi/6/include-fixed /usr/lib/gcc-cross/arm-linux-gnueabi/6/../../../../arm-linux-gnueabi/include /usr/include End of search list. GNU C11 (Debian 6.3.0-18) version 6.3.0 20170516 (arm-linux-gnueabi) compiled by GNU C version 6.3.0 20170516, GMP version 6.1.2, MPFR version 3.1.5, MPC version 1.0.3, isl version 0.15 GGC heuristics: --param ggc-min-expand=98 --param ggc-min-heapsize=128627 Compiler executable checksum: 98cf8fba2b5ed54b1eab753188c32fd6 lkm_example.c:6:16: error: expected declaration specifiers or ‘...’ before string constant MODULE_LICENSE("GPL"); ^~~~~ lkm_example.c:7:15: error: expected declaration specifiers or ‘...’ before string constant MODULE_AUTHOR("Robert W. Oliver II"); ^~~~~~~~~~~~~~~~~~~~~ lkm_example.c:8:20: error: expected declaration specifiers or ‘...’ before string constant MODULE_DESCRIPTION("A simple example Linux module."); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ lkm_example.c:9:16: error: expected declaration specifiers or ‘...’ before string constant MODULE_VERSION("0.01"); ^~~~~~ lkm_example.c: In function ‘lkm_example_init’: lkm_example.c:11:2: warning: implicit declaration of function ‘printk’ [-Wimplicit-function-declaration] printk(KERN_INFO "Hello, World!\n"); ^~~~~~ lkm_example.c:11:9: error: ‘KERN_INFO’ undeclared (first use in this function) printk(KERN_INFO "Hello, World!\n"); ^~~~~~~~~ lkm_example.c:11:9: note: each undeclared identifier is reported only once for each function it appears in lkm_example.c:11:19: error: expected ‘)’ before string constant printk(KERN_INFO "Hello, World!\n"); ^~~~~~~~~~~~~~~~~ lkm_example.c: In function ‘lkm_example_exit’: lkm_example.c:15:9: error: ‘KERN_INFO’ undeclared (first use in this function) printk(KERN_INFO "Goodbye, World!\n"); ^~~~~~~~~ lkm_example.c:15:19: error: expected ‘)’ before string constant printk(KERN_INFO "Goodbye, World!\n"); ^~~~~~~~~~~~~~~~~~~ lkm_example.c: At top level: lkm_example.c:17:1: warning: data definition has no type or storage class module_init(lkm_example_init); ^~~~~~~~~~~ lkm_example.c:17:1: warning: type defaults to ‘int’ in declaration of ‘module_init’ [-Wimplicit-int] lkm_example.c:17:1: warning: parameter names (without types) in function declaration lkm_example.c:18:1: warning: data definition has no type or storage class module_exit(lkm_example_exit); ^~~~~~~~~~~ lkm_example.c:18:1: warning: type defaults to ‘int’ in declaration of ‘module_exit’ [-Wimplicit-int] lkm_example.c:18:1: warning: parameter names (without types) in function declaration lkm_example.c:14:20: warning: ‘lkm_example_exit’ defined but not used [-Wunused-function] static void __exit lkm_example_exit(void) { ^~~~~~~~~~~~~~~~ lkm_example.c:10:19: warning: ‘lkm_example_init’ defined but not used [-Wunused-function] static int __init lkm_example_init(void) { ^~~~~~~~~~~~~~~~ Makefile:16: ошибка выполнения рецепта для цели «lkm_example.o» make: *** [lkm_example.o] Ошибка 1 igor@DebTool:~/coding/My_AT91SAM9260_board/testmod$ Правда пришдось в ручную править root@DebTool:/usr/src/linux-at91-wilc_15_4_1/include/linux/kasn-check.h: Код (C++): /* SPDX-License-Identifier: GPL-2.0 */ #ifndef _LINUX_KASAN_CHECKS_H #define _LINUX_KASAN_CHECKS_H #include <linux/types.h> /*------*/ typedef _Bool bool; #define true 1 #define false 0 /*------*/ ...... Вот Makefile: Код (Text): ###### obj-m += lkm_example.o #all: # make ARCH=armv5t CROSS_COMPILE=arm-linux-gnueabi- -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules #clean: # make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean CC := arm-linux-gnueabi-gcc MODCFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUX -v INC := -I/usr/src/linux-headers/include -I/usr/src/linux-at91-wilc_15_4_1/include #LD := #-L/usr/local/arm-linux/lib lkm_example.o: lkm_example.c #/usr/src/linux-2.6.27/include/version.h $(CC) $(MODCFLAGS) $(INC) lkm_example.c # echo insmod hello.o to turn it on # echo rmmod hello to turn if off # echo # echo X and kernel programming do not mix. # echo Do the insmod and rmmod from outside X.
Тут много примеров в одном для x86, где всё получается в другом для ARM, где не выходит ни шиша. В их количестве я сам заблудился.
Для уточнения: вот общий тест на Си: Код (C++): #include <linux/init.h> #include <linux/module.h> /*MODULE_LICENSE("Dual BSD/GPL");*/ static int hello_init(void) { printk(KERN_ALERT "Hello, world\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "Goodbye, cruel world\n"); } module_init(hello_init); module_exit(hello_exit); Вот Makefile для компиляции на ПК (общепринятый через /usr/modules/...): Код (Text): obj-m +=tm.o KDIR := /lib/modules/$(shell uname -r)/build all: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules clean: rm -rf *.o *.ko *.mod.* *.symvers *.orde Вот выхлоп компиляции: Код (Text): root@debian:/home/kto/coding/GCC/testmod# make make -C /lib/modules/3.16.0-4-amd64/build SUBDIRS=/home/kto/coding/GCC/testmod modules make[1]: вход в каталог «/usr/src/linux-headers-3.16.0-4-amd64» make[1]: Entering directory `/usr/src/linux-headers-3.16.0-4-amd64' CC [M] /home/kto/coding/GCC/testmod/tm.o Building modules, stage 2. MODPOST 1 modules CC /home/kto/coding/GCC/testmod/tm.mod.o LD [M] /home/kto/coding/GCC/testmod/tm.ko make[1]: выход из каталога «/usr/src/linux-headers-3.16.0-4-amd64» root@debian:/home/kto/coding/GCC/testmod Вот dmesg при загрузке модуля (insmod tm.ko) последующей его выгрузке (rmmod ko): Код (Text): [ 41.306464] ip_tables: (C) 2000-2006 Netfilter Core Team [ 312.455270] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [ 312.455273] Bluetooth: BNEP filters: protocol multicast [ 312.455280] Bluetooth: BNEP socket layer initialized [14044.632032] tm: module license 'unspecified' taints kernel. [14044.632040] Disabling lock debugging due to kernel taint [14165.768562] Hello, world [14399.618941] Goodbye, cruel world Вот Makefile с опорой на /usr/src/linux-headers-.....: Код (C++): obj-m +=tm.o KDIR := /usr/src/linux-headers-$(shell uname -r) all: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules clean: rm -rf *.o *.ko *.mod.* *.symvers *.orde Результаты идентичны, что не удивительно потому как /lib/modules/3.14.0-4-amd вот: Код (Text): root@debian:/lib/modules/3.16.0-4-amd64# ls -al итого 3768 drwxr-xr-x 4 root root 4096 дек 27 2017 . drwxr-xr-x 10 root root 4096 авг 9 09:44 .. lrwxrwxrwx 1 root root 37 янв 3 2017 build -> /usr/src/linux-headers-3.16.0-4-amd64 drwxr-xr-x 10 root root 4096 фев 17 2017 kernel -rw-r--r-- 1 root root 914324 дек 27 2017 modules.alias -rw-r--r-- 1 root root 885995 дек 27 2017 modules.alias.bin -rw-r--r-- 1 root root 3050 дек 15 2017 modules.builtin -rw-r--r-- 1 root root 4256 дек 27 2017 modules.builtin.bin -rw-r--r-- 1 root root 372780 дек 27 2017 modules.dep -rw-r--r-- 1 root root 509340 дек 27 2017 modules.dep.bin -rw-r--r-- 1 root root 402 дек 27 2017 modules.devname -rw-r--r-- 1 root root 118293 дек 15 2017 modules.order -rw-r--r-- 1 root root 210 дек 27 2017 modules.softdep -rw-r--r-- 1 root root 446745 дек 27 2017 modules.symbols -rw-r--r-- 1 root root 553537 дек 27 2017 modules.symbols.bin lrwxrwxrwx 1 root root 38 янв 3 2017 source -> /usr/src/linux-headers-3.16.0-4-common drwxr-xr-x 3 root root 4096 июн 8 2017 updates root@debian:/lib/modules/3.16.0-4-amd64# Имеется линк build, как раз на /usr/src/linux-headers-3.16.0-4 Но вот есть одно но - никак не могу собрать /usr/src/linux-headers для ARM
Надо в makefile архитектуру в ключах флагах указать. Типа: Код (Bash): ARCH=armv5t Если это архитектура вашего ARMa. Или: Код (Bash): -march=arm5t (может быть по-другому) Никогда этим не занимался, так предположил.
Выхлоп: Код (Text): root@debian:/home/kto/coding/GCC/testmod# make arm-none-eabi-gcc -Wall -DMODULE -D__KERNEL__ -DLINUX -v -I/home/tmp/123/include tm.c Using built-in specs. COLLECT_GCC=arm-none-eabi-gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-none-eabi/4.8/lto-wrapper Target: arm-none-eabi Configured with: ../gcc-4.8.4/configure --build=x86_64-linux-gnu --prefix=/usr --includedir='/usr/lib/include' --mandir='/usr/lib/share/man' --infodir='/usr/lib/share/info' --sysconfdir=/etc --localstatedir=/var --disable-silent-rules --libexecdir='/usr/lib/lib/gcc-arm-none-eabi' --disable-maintainer-mode --disable-dependency-tracking --enable-languages=c,c++ --prefix=/usr/lib --infodir=/usr/share/doc/gcc-arm-none-eabi/info --mandir=/usr/share/man --htmldir=/usr/share/doc/gcc-arm-none-eabi/html --pdfdir=/usr/share/doc/gcc-arm-none-eabi/pdf --bindir=/usr/bin --libexecdir=/usr/lib --libdir=/usr/lib --with-system-zlib --enable-multilib --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-libstdc++-v3 --disable-nls --disable-shared --disable-threads --disable-tls --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-none-eabi --with-gnu-as --with-gnu-ld --with-headers=no --without-newlib --with-pkgversion=4.8.4-1+11-1 --without-included-gettext --with-multilib-list=armv6-m,armv7-m,armv7e-m,armv7-r INHIBIT_LIBC_CFLAGS=-DUSE_TM_CLONE_REGISTRY=0 AR_FOR_TARGET=arm-none-eabi-ar AS_FOR_TARGET=arm-none-eabi-as LD_FOR_TARGET=arm-none-eabi-ld NM_FOR_TARGET=arm-none-eabi-nm OBJDUMP_FOR_TARGET=arm-none-eabi-objdump RANLIB_FOR_TARGET=arm-none-eabi-ranlib READELF_FOR_TARGET=arm-none-eabi-readelf STRIP_FOR_TARGET=arm-none-eabi-strip Thread model: single gcc version 4.8.4 20141219 (release) (4.8.4-1+11-1) COLLECT_GCC_OPTIONS='-Wall' '-D' 'MODULE' '-D' '__KERNEL__' '-D' 'LINUX' '-v' '-I' '/home/tmp/123/include' /usr/lib/gcc/arm-none-eabi/4.8/cc1 -quiet -v -I /home/tmp/123/include -D__USES_INITFINI__ -D MODULE -D __KERNEL__ -D LINUX tm.c -quiet -dumpbase tm.c -auxbase tm -Wall -version -o /tmp/ccjGM9md.s GNU C (4.8.4-1+11-1) version 4.8.4 20141219 (release) (arm-none-eabi) compiled by GNU C version 4.9.2, GMP version 6.0.0, MPFR version 3.1.2-p3, MPC version 1.0.2 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 ignoring nonexistent directory "/usr/lib/gcc/arm-none-eabi/4.8/../../../arm-none-eabi/sys-include" #include "..." search starts here: #include <...> search starts here: /home/tmp/123/include /usr/lib/gcc/arm-none-eabi/4.8/include /usr/lib/gcc/arm-none-eabi/4.8/include-fixed /usr/lib/gcc/arm-none-eabi/4.8/../../../arm-none-eabi/include End of search list. GNU C (4.8.4-1+11-1) version 4.8.4 20141219 (release) (arm-none-eabi) compiled by GNU C version 4.9.2, GMP version 6.0.0, MPFR version 3.1.2-p3, MPC version 1.0.2 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: ec544621a751092964950ca617b6fe72 tm.c:3:24: fatal error: linux/init.h: No such file or directory #include <linux/init.h> ^ compilation terminated. Makefile:20: ошибка выполнения рецепта для цели «tm.o» make: *** [tm.o] Ошибка 1 root@debian:/home/kto/coding/GCC/testmod# Makefile: Код (Text): CC := arm-none-eabi-gcc MODCFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUX -v INC := -I/home/tmp/123/include tm.o: tm.c #/home/tmp/2.6.27m $(CC) $(MODCFLAGS) $(INC) $(KD) tm.c