Перейти к содержанию
    

AT91SAM9260 linux-headers вопрос

Скачал linux-2.6.27 (именно такая версия на плате AT91SAM9260 уже установлена - прибыла из Китая). Моя цель это собрать загружаемый модуль.

Формировал заголовки так:

root@DebTool:/home/igor/coding/My_AT91SAM9260_board/linux-at91-wilc_15_4_1# make ARCH=arm at91_dt_defconfig
#
# No change to .config
#
root@DebTool:/home/igor/coding/My_AT91SAM9260_board/linux-at91-wilc_15_4_1# make ARCH=arm INSTALL_HDR_PATH=/usr/src/linux-headers headers_install
  INSTALL /usr/src/linux-headers/include
root@DebTool:/home/igor/coding/My_AT91SAM9260_board/linux-at91-wilc_15_4_1# 

Как Вы заметили это не та версия - взято для пробы (родная 2.6.27 тут глючит)

 

Версия собрана с возможностью загрузки модулей (insmod и подобное). Но вот получить linux-hesders не выходит. При компиляции выводит:

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-headers/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/ccZ8lVED.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"
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=128627
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$

Вот Makefile:

######

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
#LD             := #-L/usr/local/arm-linux/lib

lkm_example.o: lkm_example.c #/usr/src/linux-2.6.27.10/include/version.h
        $(CC) $(MODCFLAGS) $(INC) -c 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.

он взят из примеров (редактировался не раз - перебирал много вариантов)

вот простой пример кода:

//

#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);

Не выходит собрать. И прблема я думаю в корректности /usr/src/linux-headers

Какой вариант решения может быть?

Спасибо!

 

Изменено пользователем Овчинников Игорь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, Овчинников Игорь said:

Скачал linux-2.6.27 (именно такая версия на плате AT91SAM9260 уже установлена - прибыла из Китая). Моя цель это собрать загружаемый модуль.

Формировал заголовки так:


root@DebTool:/home/igor/coding/My_AT91SAM9260_board/linux-at91-wilc_15_4_1# make ARCH=arm at91_dt_defconfig
#
# No change to .config
#
root@DebTool:/home/igor/coding/My_AT91SAM9260_board/linux-at91-wilc_15_4_1# make ARCH=arm INSTALL_HDR_PATH=/usr/src/linux-headers headers_install
  INSTALL /usr/src/linux-headers/include
root@DebTool:/home/igor/coding/My_AT91SAM9260_board/linux-at91-wilc_15_4_1# 

Как Вы заметили это не та версия - взято для пробы (родная 2.6.27 тут глючит)

 

Версия собрана с возможностью загрузки модулей (insmod и подобное). Но вот получить linux-hesders не выходит. При компиляции выводит:


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-headers/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/ccZ8lVED.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"
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=128627
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$

Вот Makefile:


######

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
#LD             := #-L/usr/local/arm-linux/lib

lkm_example.o: lkm_example.c #/usr/src/linux-2.6.27.10/include/version.h
        $(CC) $(MODCFLAGS) $(INC) -c 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.

он взят из примеров (редактировался не раз - перебирал много вариантов)

вот простой пример кода:


//

#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);

Не выходит собрать. И прблема я думаю в корректности /usr/src/linux-headers

Какой вариант решения может быть?

Спасибо!

 

Уже неделю ищу, ковыряюсь...
Перебрал множество всего... и варианты всякие. Для PC собирается без проблем, а для платы никак.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

37 minutes ago, Овчинников Игорь said:

ignoring nonexistent directory "/usr/src/linux-kernel/include"

Чтобы собрать модуль, нужны хидеры и конфиг. Если последнего нет, то проще накатить на плату что-нибудь свежее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, aaarrr said:

Чтобы собрать модуль, нужны хидеры и конфиг. Если последнего нет, то проще накатить на плату что-нибудь свежее.

Позже точно буду накатывать сежее... но вот надо научится извлекать из исходников эти хидеры и кофиг. Вроде всё делал как:

root@DebTool:/usr/src/linux-at91-wilc_15_4_1# ls arch/arm/configs
am200epdkit_defconfig	  ebsa110_defconfig	 lpc18xx_defconfig	  omap2plus_defconfig	socfpga_defconfig
aspeed_g4_defconfig	  efm32_defconfig	 lpc32xx_defconfig	  orion5x_defconfig	spear13xx_defconfig
aspeed_g5_defconfig	  em_x270_defconfig	 lpd270_defconfig	  oxnas_v6_defconfig	spear3xx_defconfig
assabet_defconfig	  ep93xx_defconfig	 lubbock_defconfig	  palmz72_defconfig	spear6xx_defconfig
at91_dt_defconfig	  eseries_pxa_defconfig  magician_defconfig	  pcm027_defconfig	spitz_defconfig
axm55xx_defconfig	  exynos_defconfig	 mainstone_defconfig	  pleb_defconfig	stm32_defconfig
badge4_defconfig	  ezx_defconfig		 milbeaut_m10v_defconfig  prima2_defconfig	sunxi_defconfig
bcm2835_defconfig	  footbridge_defconfig	 mini2440_defconfig	  pxa168_defconfig	tango4_defconfig
cerfcube_defconfig	  gemini_defconfig	 mmp2_defconfig		  pxa255-idp_defconfig	tct_hammer_defconfig
clps711x_defconfig	  h3600_defconfig	 moxart_defconfig	  pxa3xx_defconfig	tegra_defconfig
cm_x2xx_defconfig	  h5000_defconfig	 mps2_defconfig		  pxa910_defconfig	trizeps4_defconfig
cm_x300_defconfig	  hackkit_defconfig	 multi_v4t_defconfig	  pxa_defconfig		u300_defconfig
cns3420vb_defconfig	  hisi_defconfig	 multi_v5_defconfig	  qcom_defconfig	u8500_defconfig
colibri_pxa270_defconfig  imote2_defconfig	 multi_v7_defconfig	  realview_defconfig	versatile_defconfig
colibri_pxa300_defconfig  imx_v4_v5_defconfig	 mv78xx0_defconfig	  rpc_defconfig		vexpress_defconfig
collie_defconfig	  imx_v6_v7_defconfig	 mvebu_v5_defconfig	  s3c2410_defconfig	vf610m4_defconfig
corgi_defconfig		  integrator_defconfig	 mvebu_v7_defconfig	  s3c6400_defconfig	viper_defconfig
davinci_all_defconfig	  iop32x_defconfig	 mxs_defconfig		  s5pv210_defconfig	vt8500_v6_v7_defconfig
dove_defconfig		  ixp4xx_defconfig	 neponset_defconfig	  sama5_defconfig	xcep_defconfig
dram_0x00000000.config	  jornada720_defconfig	 netwinder_defconfig	  shannon_defconfig	zeus_defconfig
dram_0xc0000000.config	  keystone_defconfig	 nhk8815_defconfig	  shmobile_defconfig	zx_defconfig
dram_0xd0000000.config	  lart_defconfig	 omap1_defconfig	  simpad_defconfig
root@DebTool:/usr/src/linux-at91-wilc_15_4_1# make ARCH=arm at91_dt_defconfig
#
# No change to .config
#
root@DebTool:/usr/src/linux-at91-wilc_15_4_1# 

Что не так:

потом делаю:

root@DebTool:/usr/src/linux-at91-wilc_15_4_1# make ARCH=arm INSTALL_HDR_PATH=/usr/src/linux-headers headers_install
  INSTALL /usr/src/linux-headers/include
root@DebTool:/usr/src/linux-at91-wilc_15_4_1# 

Или надо вручную собирать? Ведь всё-равно надо будет. Хоть глазком бы взлянуть на готовую /usr/src/linux-headers для ARM, а не для машины ПК с Debian, которая получена из исходников ядра.

Может что не так делыю? Может надо вручную файлы копировать? И надо конфиг вручную писать?

Вот отрывок .config в директории исходников ядра после вышеуказанных манипуляций:

 

#
# CPU Core family selection
#
# CONFIG_ARCH_MULTI_V4 is not set
CONFIG_ARCH_MULTI_V4T=y
CONFIG_ARCH_MULTI_V5=y
CONFIG_ARCH_MULTI_V4_V5=y
# CONFIG_ARCH_MULTI_V6 is not set
# CONFIG_ARCH_MULTI_V7 is not set
# end of Multiple platform selection

# CONFIG_MACH_ASM9260 is not set
# CONFIG_ARCH_ASPEED is not set
CONFIG_ARCH_AT91=y
CONFIG_SOC_AT91RM9200=y
CONFIG_SOC_AT91SAM9=y
CONFIG_SOC_SAM9X60=y

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если вы хотите извлечь все необходимое для сборки модуля (типа linux-headers на ПК), то руками, или см. https://patchwork.kernel.org/project/linux-kbuild/patch/[email protected]/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, aaarrr said:

Если вы хотите извлечь все необходимое для сборки модуля (типа linux-headers на ПК), то руками, или см. https://patchwork.kernel.org/project/linux-kbuild/patch/[email protected]/

Спасибо! Скажу правду: для меня всё это новое!

Но для РУКАМИ мне надо образец... готовый образец. Буду курить...

 

Патчить (утилита patch) пока не умею, буду вручную... вроде там не много.

Изменено пользователем Овчинников Игорь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 8/8/2021 at 1:52 PM, aaarrr said:

Если вы хотите извлечь все необходимое для сборки модуля (типа linux-headers на ПК), то руками, или см. https://patchwork.kernel.org/project/linux-kbuild/patch/[email protected]/

Спасибо за ответ!

Есть ещё один вопрос:

Я не имею опыта в этом... а вопрос в том если собирать модули, могу ли я применять версии исходников Linux-2.6.xx (где xx-иное от моей версии число)

В данном случае:

-bash-3.2$ uname -a
Linux My_AT91SAM9263_board 2.6.27 #2 Sun Feb 8 16:11:45 PST 2015 armv5tejl GNU/Linux
-bash-3.2$

Могу ли я применять версию исходников linux-2.6.32 для сборки.

Мои испытания показали:

Имеем MOXA UC-7112-LX-Plus:

root@Moxa:/lib/modules/2.6.9-uc0/kernel/net/8021q# uname -a
Linux Moxa 2.6.9-uc0 #5 Wed Jun 28 14:35:20 CST 2017 armv4tl unknown
root@Moxa:/lib/modules/2.6.9-uc0/kernel/net/8021q# insmod 8021q.ko
root@Moxa:/lib/modules/2.6.9-uc0/kernel/net/8021q# lsmod          
Module                  Size  Used by    Not tainted
8021q                  11592  0 
root@Moxa:/lib/modules/2.6.9-uc0/kernel/net/8021q#

В то время слопированный с неё модуль на плату:

bash-3.2# uname -a
Linux My_AT91SAM9263_board 2.6.27 #2 Sun Feb 8 16:11:45 PST 2015 armv5tejl GNU/Linux
bash-3.2# insmod 8021q.ko
insmod: can't insert '8021q.ko': invalid module format
bash-3.2# 

Ранее этот модуль был скопирован на UC-7112-LX-Plus с IA240LX (оба контроллера производителя MOXA).

Насколько должна быть точны числа версии, и можно ли брать другую версию исходников (в моём случае вместо 2.6.27 применить 2.6.32).

Может надо указывать что-то еще для сборки. Скачанный мной linux-2.6.27 по моему сильно не рабочий в плане как конфигурации, так и прочего.

Спасибо!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно использовать ключ -f для принудительной загрузки модуля. Но работоспособность, понятное дело, не гарантируется.

 

47 minutes ago, Овчинников Игорь said:

Скачанный мной linux-2.6.27 по моему сильно не рабочий в плане как конфигурации, так и прочего.

Ему нужен gcc версии 4.x

 

Посмотрите, нет ли .dts для вашей платы. Лучше уж собрать и залить свежую систему, чем оживлять 2.6 без исходников.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

по поводу наличия кросс компилятора;

igor@debian1:~/coding/GCC/linux-master/include/linux$ arm
arm2hpdl                          arm-linux-gnueabihf-gcc           arm-linux-gnueabi-ranlib
arm-linux-gnueabi-addr2line       arm-linux-gnueabihf-gcc-6         arm-linux-gnueabi-readelf
arm-linux-gnueabi-ar              arm-linux-gnueabihf-gcc-ar        arm-linux-gnueabi-size
arm-linux-gnueabi-as              arm-linux-gnueabihf-gcc-ar-6      arm-linux-gnueabi-strings
arm-linux-gnueabi-c++filt         arm-linux-gnueabihf-gcc-nm        arm-linux-gnueabi-strip
arm-linux-gnueabi-cpp             arm-linux-gnueabihf-gcc-nm-6      arm-none-eabi-addr2line
arm-linux-gnueabi-cpp-6           arm-linux-gnueabihf-gcc-ranlib    arm-none-eabi-ar
arm-linux-gnueabi-dwp             arm-linux-gnueabihf-gcc-ranlib-6  arm-none-eabi-as
arm-linux-gnueabi-elfedit         arm-linux-gnueabihf-gcov          arm-none-eabi-c++
arm-linux-gnueabi-gcc             arm-linux-gnueabihf-gcov-6        arm-none-eabi-c++filt
arm-linux-gnueabi-gcc-6           arm-linux-gnueabihf-gcov-dump     arm-none-eabi-cpp
arm-linux-gnueabi-gcc-ar          arm-linux-gnueabihf-gcov-dump-6   arm-none-eabi-elfedit
arm-linux-gnueabi-gcc-ar-6        arm-linux-gnueabihf-gcov-tool     arm-none-eabi-g++
arm-linux-gnueabi-gcc-nm          arm-linux-gnueabihf-gcov-tool-6   arm-none-eabi-gcc
arm-linux-gnueabi-gcc-nm-6        arm-linux-gnueabihf-gprof         arm-none-eabi-gcc-5.4.1
arm-linux-gnueabi-gcc-ranlib      arm-linux-gnueabihf-ld            arm-none-eabi-gcc-ar
arm-linux-gnueabi-gcc-ranlib-6    arm-linux-gnueabihf-ld.bfd        arm-none-eabi-gcc-nm
arm-linux-gnueabi-gcov            arm-linux-gnueabihf-ld.gold       arm-none-eabi-gcc-ranlib
arm-linux-gnueabi-gcov-6          arm-linux-gnueabihf-nm            arm-none-eabi-gcov
arm-linux-gnueabi-gcov-dump       arm-linux-gnueabihf-objcopy       arm-none-eabi-gcov-tool
arm-linux-gnueabi-gcov-dump-6     arm-linux-gnueabihf-objdump       arm-none-eabi-gprof
arm-linux-gnueabi-gcov-tool       arm-linux-gnueabihf-ranlib        arm-none-eabi-ld
arm-linux-gnueabi-gcov-tool-6     arm-linux-gnueabihf-readelf       arm-none-eabi-ld.bfd
arm-linux-gnueabi-gprof           arm-linux-gnueabihf-size          arm-none-eabi-nm
arm-linux-gnueabihf-addr2line     arm-linux-gnueabihf-strings       arm-none-eabi-objcopy
arm-linux-gnueabihf-ar            arm-linux-gnueabihf-strip         arm-none-eabi-objdump
arm-linux-gnueabihf-as            arm-linux-gnueabi-ld              arm-none-eabi-ranlib
arm-linux-gnueabihf-c++filt       arm-linux-gnueabi-ld.bfd          arm-none-eabi-readelf
arm-linux-gnueabihf-cpp           arm-linux-gnueabi-ld.gold         arm-none-eabi-size
arm-linux-gnueabihf-cpp-6         arm-linux-gnueabi-nm              arm-none-eabi-strings
arm-linux-gnueabihf-dwp           arm-linux-gnueabi-objcopy         arm-none-eabi-strip
arm-linux-gnueabihf-elfedit       arm-linux-gnueabi-objdump         
igor@debian1:~/coding/GCC/linux-master/include/linux$

Вот:

igor@debian1:~/coding/GCC/linux-master/include/linux$ 
igor@debian1:~/coding/GCC/linux-master$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules
  CHK     include/linux/version.h
make[1]: «include/asm-arm/mach-types.h» не требует обновления.
  CHK     include/linux/utsrelease.h
  SYMLINK include/asm -> include/asm-arm
  CC      kernel/bounds.s
In file included from include/linux/compiler.h:40:0,
                 from include/linux/stddef.h:4,
                 from include/linux/posix_types.h:4,
                 from include/linux/types.h:14,
                 from include/linux/page-flags.h:8,
                 from kernel/bounds.c:9:
include/linux/compiler-gcc.h:86:30: fatal error: linux/compiler-gcc6.h: Нет такого файла или каталога
 #include gcc_header(__GNUC__)
                              ^
compilation terminated.
/home/igor/coding/GCC/linux-master/./Kbuild:35: ошибка выполнения рецепта для цели «kernel/bounds.s»
make[1]: *** [kernel/bounds.s] Ошибка 1
Makefile:986: ошибка выполнения рецепта для цели «prepare0»
make: *** [prepare0] Ошибка 2
igor@debian1:~/coding/GCC/linux-master$

 

и uname -a:

igor@debian1:~/coding/GCC/linux-master$ uname -a
Linux debian1 4.9.0-16-686-pae #1 SMP Debian 4.9.272-2 (2021-07-19) i686 GNU/Linux
igor@debian1:~/coding/GCC/linux-master$

Пробую кроссуомпиляцию параллельно на трёх машинах:

1. Debian 10 на NUC7PJYH

2. Виртуальная машина с Debian 9 на том же NUC7PJYH

3. Старая машина (доступ по SSH) c Debian 9

Задача научится конфигурировать всё для сборки модулей ну и в последствии ядра, а так же собирать всё это.

 

А это на виртуальной машине:

igor@DebTool:~/coding/My_AT91SAM9260_board/linux-master$ 
igor@DebTool:~/coding/My_AT91SAM9260_board/linux-master$ make ARCH=arm CROCC_COMPILE=arm-linux-gnueabi- modules
  CHK     include/linux/version.h
make[1]: «include/asm-arm/mach-types.h» не требует обновления.
  CHK     include/linux/utsrelease.h
  SYMLINK include/asm -> include/asm-arm
  CC      kernel/bounds.s
gcc: error: unrecognized argument in option ‘-mabi=apcs-gnu’
gcc: note: valid arguments to ‘-mabi=’ are: ms sysv
gcc: error: unrecognized command line option ‘-mlittle-endian’
gcc: error: unrecognized command line option ‘-mapcs’; did you mean ‘-maes’?
gcc: error: unrecognized command line option ‘-mno-sched-prolog’; did you mean ‘-Wno-sign-promo’?
/home/igor/coding/My_AT91SAM9260_board/linux-master/./Kbuild:35: ошибка выполнения рецепта для цели «kernel/bounds.s»
make[1]: *** [kernel/bounds.s] Ошибка 1
Makefile:983: ошибка выполнения рецепта для цели «prepare0»
make: *** [prepare0] Ошибка 2
igor@DebTool:~/coding/My_AT91SAM9260_board/linux-master$

 

Изменено пользователем Овчинников Игорь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 minutes ago, Овчинников Игорь said:

linux/compiler-gcc6.h: Нет такого файла или каталога

Ядро 2.6 не знает о существовании GCC 6.x, можно или добавить файл compiler-gcc6.h или найти кросс-компилятор версии 4.x

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Недавно решал подобную задачу. нужно было собрать ядро 3.7.1. Мне было проще скачать Linux 14 какой-то, но обязательно LTS. Другие дистрибутивы не могли найти свои архивы при инсталляции ПО. Ubuntu 14.04 LTS же прекарсно установился, скачал необходимые пакеты, а уже в нём я настроил и скомпилировал Crosstool-NG тоже старой версии, и собрал ядро. Может быть Вам поможет мой совет)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Найти собранный 4.x сильно проще, чем ставить старый дистрибутив, чтобы собрать его самому в crosstool-ng.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 minutes ago, aaarrr said:

Найти собранный 4.x сильно проще

Для Вас, т.е. человека с опытом, да. Но для не очень опытного будет не лишним и иной совет. Чтобы можно было в случае проблемы, выбрать другой вариант.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот:

diff --git a/include/linux/compiler-gcc6.h b/include/linux/compiler-gcc6.h
new file mode 100644
index 0000000..208767a
--- /dev/null
+++ b/include/linux/compiler-gcc6.h
@@ -0,0 +1,55 @@ 
+#ifndef __LINUX_COMPILER_H
+#error "Please don't include <linux/compiler-gcc6.h> directly, include <linux/compiler.h> instead."
+#endif
+
+#define __used				__attribute__((__used__))
+#define __must_check			__attribute__((warn_unused_result))
+#define __compiler_offsetof(a, b)	__builtin_offsetof(a, b)
+
+/* Mark functions as cold. gcc will assume any path leading to a call
+   to them will be unlikely.  This means a lot of manual unlikely()s
+   are unnecessary now for any paths leading to the usual suspects
+   like BUG(), printk(), panic() etc. [but let's keep them for now for
+   older compilers]
+
+   gcc also has a __attribute__((__hot__)) to move hot functions into
+   a special section, but I don't see any sense in this right now in
+   the kernel context */
+#define __cold			__attribute__((__cold__))
+
+#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
+
+#ifndef __CHECKER__
+# define __compiletime_warning(message) __attribute__((warning(message)))
+# define __compiletime_error(message) __attribute__((error(message)))
+#endif /* __CHECKER__ */
+
+/*
+ * Mark a position in code as unreachable.  This can be used to
+ * suppress control flow warnings after asm blocks that transfer
+ * control elsewhere.
+ */
+#define unreachable() __builtin_unreachable()
+
+/* Mark a function definition as prohibited from being cloned. */
+#define __noclone	__attribute__((__noclone__))
+
+/*
+ * Tell the optimizer that something else uses this function or variable.
+ */
+#define __visible __attribute__((externally_visible))
+
+/*
+ * 'asm goto' miscompilation is fixed in GCC 5.x version:
+ *
+ *   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
+ */
+#define asm_volatile_goto(x...)	do { asm goto(x); } while (0)
+
+#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
+#define __HAVE_BUILTIN_BSWAP32__
+#define __HAVE_BUILTIN_BSWAP64__
+#define __HAVE_BUILTIN_BSWAP16__
+#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
+
+#define KASAN_ABI_VERSION 4

Это конечно патч, но я из него сделал(редактировал) compiler-gcc6.h и положил на место. Ну и компиляция:

gor@debian1:~/coding/GCC/linux-master$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules
  CHK     include/linux/version.h
make[1]: «include/asm-arm/mach-types.h» не требует обновления.
  CHK     include/linux/utsrelease.h
  SYMLINK include/asm -> include/asm-arm
  CC      kernel/bounds.s
  GEN     include/linux/bounds.h
  CC      arch/arm/kernel/asm-offsets.s
  GEN     include/asm/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  CC      scripts/mod/empty.o
  HOSTCC  scripts/mod/mk_elfconfig
  MKELF   scripts/mod/elfconfig.h
  HOSTCC  scripts/mod/file2alias.o
  HOSTCC  scripts/mod/modpost.o
  HOSTCC  scripts/mod/sumversion.o
  HOSTLD  scripts/mod/modpost
  HOSTCC  scripts/kallsyms
  HOSTCC  scripts/conmakehash
  CC [M]  drivers/scsi/scsi_wait_scan.o
  CC [M]  drivers/usb/gadget/file_storage.o
In file included from include/linux/blkdev.h:12:0,
                 from drivers/usb/gadget/file_storage.c:233:
include/linux/pagemap.h: In function ‘fault_in_pages_readable’:
include/linux/pagemap.h:416:16: warning: variable ‘c’ set but not used [-Wunused-but-set-variable]
  volatile char c;
                ^
drivers/usb/gadget/file_storage.c: In function ‘invalidate_sub’:
drivers/usb/gadget/file_storage.c:1906:16: warning: variable ‘rc’ set but not used [-Wunused-but-set-variable]
  unsigned long rc;
                ^~
drivers/usb/gadget/file_storage.c: In function ‘do_start_stop’:
drivers/usb/gadget/file_storage.c:2269:13: warning: variable ‘start’ set but not used [-Wunused-but-set-variable]
  int  loej, start;
             ^~~~~
drivers/usb/gadget/file_storage.c:2269:7: warning: variable ‘loej’ set but not used [-Wunused-but-set-variable]
  int  loej, start;
       ^~~~
drivers/usb/gadget/file_storage.c: In function ‘check_parameters’:
drivers/usb/gadget/file_storage.c:3859:6: warning: variable ‘prot’ set but not used [-Wunused-but-set-variable]
  int prot;
      ^~~~
  CC [M]  drivers/usb/gadget/serial.o
In file included from drivers/usb/gadget/serial.c:48:0:
drivers/usb/gadget/u_serial.c: In function ‘gs_write’:
drivers/usb/gadget/u_serial.c:877:7: warning: variable ‘status’ set but not used [-Wunused-but-set-variable]
  int  status;
       ^~~~~~
  CC [M]  drivers/usb/gadget/zero.o
  CC [M]  drivers/usb/gadget/inode.o
In file included from drivers/usb/gadget/inode.c:28:0:
include/linux/pagemap.h: In function ‘fault_in_pages_readable’:
include/linux/pagemap.h:416:16: warning: variable ‘c’ set but not used [-Wunused-but-set-variable]
  volatile char c;
                ^
  LD [M]  drivers/usb/gadget/g_zero.o
  LD [M]  drivers/usb/gadget/gadgetfs.o
  LD [M]  drivers/usb/gadget/g_file_storage.o
  LD [M]  drivers/usb/gadget/g_serial.o
  Building modules, stage 2.
  MODPOST 5 modules
  CC      drivers/scsi/scsi_wait_scan.mod.o
  LD [M]  drivers/scsi/scsi_wait_scan.ko
  CC      drivers/usb/gadget/g_file_storage.mod.o
  LD [M]  drivers/usb/gadget/g_file_storage.ko
  CC      drivers/usb/gadget/g_serial.mod.o
  LD [M]  drivers/usb/gadget/g_serial.ko
  CC      drivers/usb/gadget/g_zero.mod.o
  LD [M]  drivers/usb/gadget/g_zero.ko
  CC      drivers/usb/gadget/gadgetfs.mod.o
  LD [M]  drivers/usb/gadget/gadgetfs.ko
igor@debian1:~/coding/GCC/linux-master$

Благодарен за поддержку! Но дело пока не сделано.

Зачем всё это? Надо делать систему управления... для прибора(извините не скажу), а требования; Bluetooth и/или WIFI + MASSORAGE + SPI + дисплей. Чую на контроллере не справлюсь. За свои деньги купил плату с расчётом, что привыкну к линукс (сборка, модули). А контроллер будет какой-нибудь Cortex с внешней RAM+ROM + некая периферия... думаю что надо сделать маленкое что-то с системой что бы можно было просто конфигурировать и впаивать в плату (прибора, устройства и пр.). Ну не ESP же предлагать для изделий........ 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, Овчинников Игорь said:

За свои деньги купил плату

Какую? Возможно, она поддерживается в актуальных ядрах (маловероятно, если что-то сильно китайское, но все же). Начинать освоение с устаревшего - лишняя головная боль.

 

7 minutes ago, Овчинников Игорь said:

Bluetooth и/или WIFI

И с ними может быть проблема при использовании 2.6 - backporting драйверов занятие своеобразное.

 

14 minutes ago, Овчинников Игорь said:

думаю что надо сделать маленкое что-то с системой что бы можно было просто конфигурировать и впаивать в плату (прибора, устройства и пр.)

Могу порекомендовать SiP ATSAM9X60, делал на нем "linux-микросхему" - 100-ногий модуль для напаивания на несущую плату, Ethernet и 4ГБ eMMC на борту. Получилось 35x35мм.

 

9 minutes ago, Овчинников Игорь said:

Ну не ESP же предлагать для изделий........

Почему нет, если удовлетворяет запросам?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...