fbtft module fails to build under armv6h (but works on i686)

This forum is for topics dealing with problems with software specifically in the ARMv6h repo.

fbtft module fails to build under armv6h (but works on i686)

Postby dreamlocked » Mon Apr 28, 2014 8:43 pm

Dear fellow archers,

I am writing a PKGBUILD for a driver for small TFT displays (https://github.com/notro/fbtft/wiki). The purpose is to build the individual modules without having to re-build the entire kernel.
I have drawn inspiration from other PKGBUILDS and from https://www.kernel.org/doc/Documentatio ... odules.txt
So far, the PKGBUILD works fine when built on i686, but fails on my Raspberry-pi (armv6h). The error issued by makepkg is also included below.

I have attempted the build against the raspberrypi kernel and headers version 3.10.38-1 and 3.14.2, and tried on a fresh install, with the same error.

I have a hunch that there is something missing in the linux-raspberrypi-headers package, but I may be missing something myself, as I am quite new to building individual kernel modules.

Would anyone have any insights on the conundrum?

Thank you for your time,
- dreamlocked

PKGBUILD:
$this->bbcode_second_pass_code('', '
pkgname=fbtft-git
pkgver=r226.24cf1c1
pkgrel=1
pkgdesc="Linux Framebuffer drivers for small TFT LCD display modules"
arch=('armv6h')
url="https://github.com/notro/fbtft"
license=('GPL')
depends=()
makedepends=('git' 'linux-raspberrypi-headers')
source=("$pkgname"::'git+https://github.com/notro/fbtft.git')
md5sums=('SKIP')

pkgver() {
cd "${srcdir}/${pkgname}"
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}

build() {
cd "${srcdir}/${pkgname}"

make -C /lib/modules/`uname -r`/build M=${PWD} \
CONFIG_FB_TFT=m \
CONFIG_FB_TFT_HX8340BN=n \
CONFIG_FB_TFT_HX8347D=n \
CONFIG_FB_TFT_HX8353D=n \
CONFIG_FB_TFT_ILI9320=n \
CONFIG_FB_TFT_ILI9325=n \
CONFIG_FB_TFT_ILI9340=n \
CONFIG_FB_TFT_ILI9341=n \
CONFIG_FB_TFT_PCD8544=n \
CONFIG_FB_TFT_S6D1121=n \
CONFIG_FB_TFT_SSD1289=n \
CONFIG_FB_TFT_SSD1306=n \
CONFIG_FB_TFT_SSD1331=n \
CONFIG_FB_TFT_SSD1351=n \
CONFIG_FB_TFT_ST7735R=m \
CONFIG_FB_TFT_TINYLCD=n \
CONFIG_FB_TFT_WATTEROTT=n \
CONFIG_FB_FLEX=n \
CONFIG_FB_TFT_FBTFT_DEVICE=m \
modules

}
package() {
cd "${srcdir}/${pkgname}"
make -C /lib/modules/`uname -r`/build M=${PWD} INSTALL_MOD_PATH=${pkgdir}/usr modules_install
}
')

make / makepkg error:
$this->bbcode_second_pass_code('', '
==> Starting build()...
make: Entering directory '/usr/src/linux-3.10.38-1-ARCH'
CC [M] ~/fbtft/src/fbtft-git/fbtft-core.o
~/fbtft/src/fbtft-git/fbtft-core.c: In function 'fbtft_unregister_backlight':
~/fbtft/src/fbtft-git/fbtft-core.c:231:15: error: 'struct fb_info' has no member named 'bl_dev'
if (par->info->bl_dev) {
^
~/fbtft/src/fbtft-git/fbtft-core.c:232:12: error: 'struct fb_info' has no member named 'bl_dev'
par->info->bl_dev->props.power = FB_BLANK_POWERDOWN;
^
~/fbtft/src/fbtft-git/fbtft-core.c:233:36: error: 'struct fb_info' has no member named 'bl_dev'
backlight_update_status(par->info->bl_dev);
^
~/fbtft/src/fbtft-git/fbtft-core.c:234:21: error: 'struct fb_info' has no member named 'bl_dev'
bl_ops = par->info->bl_dev->ops;
^
~/fbtft/src/fbtft-git/fbtft-core.c:235:40: error: 'struct fb_info' has no member named 'bl_dev'
backlight_device_unregister(par->info->bl_dev);
^
~/fbtft/src/fbtft-git/fbtft-core.c:236:12: error: 'struct fb_info' has no member named 'bl_dev'
par->info->bl_dev = NULL;
^
~/fbtft/src/fbtft-git/fbtft-core.c: In function 'fbtft_register_backlight':
~/fbtft/src/fbtft-git/fbtft-core.c:280:11: error: 'struct fb_info' has no member named 'bl_dev'
par->info->bl_dev = bd;
^
~/fbtft/src/fbtft-git/fbtft-core.c: In function 'fbtft_register_framebuffer':
~/fbtft/src/fbtft-git/fbtft-core.c:961:13: error: 'struct fb_info' has no member named 'bl_dev'
if (fb_info->bl_dev) {
^
~/fbtft/src/fbtft-git/fbtft-core.c:962:10: error: 'struct fb_info' has no member named 'bl_dev'
fb_info->bl_dev->props.power = FB_BLANK_UNBLANK;
^
~/fbtft/src/fbtft-git/fbtft-core.c:963:10: error: 'struct fb_info' has no member named 'bl_dev'
fb_info->bl_dev->ops->update_status(fb_info->bl_dev);
^
~/fbtft/src/fbtft-git/fbtft-core.c:963:46: error: 'struct fb_info' has no member named 'bl_dev'
fb_info->bl_dev->ops->update_status(fb_info->bl_dev);
^
scripts/Makefile.build:308: recipe for target '~/fbtft/src/fbtft-git/fbtft-core.o' failed
make[1]: *** [~/fbtft/src/fbtft-git/fbtft-core.o] Error 1
Makefile:1224: recipe for target '_module_~/fbtft/src/fbtft-git' failed
make: *** [_module_~/fbtft/src/fbtft-git] Error 2
make: Leaving directory '/usr/src/linux-3.10.38-1-ARCH'
==> ERROR: A failure occurred in build().
Aborting...
')
dreamlocked
 
Posts: 5
Joined: Mon Apr 28, 2014 5:27 am

Re: fbtft module fails to build under armv6h (but works on i

Postby WarheadsSE » Mon Apr 28, 2014 9:25 pm

Immediate thought: start grepping /usr/src for the definition of 'struct fb_info' on both platforms, and find the difference.
Core Developer
Remember: Arch Linux ARM is entirely community donation supported!
WarheadsSE
Developer
 
Posts: 6807
Joined: Mon Oct 18, 2010 2:12 pm

Re: fbtft module fails to build under armv6h (but works on i

Postby dreamlocked » Mon Apr 28, 2014 11:10 pm

Thank you for the reply. I grepped for 'struct fb_info' on both source directories and the result of diff on the sorted lists gives the output below.
It would seem that on the relevant header fb.h, 'struct fb_info' is defined as static on arm rather than extern which is the case on i686.
I will change the fb.h on the pi to be similar to the one on i686 when I get a chance and see what it gives.

The diff output:
$this->bbcode_second_pass_code('', '
$ diff armv6h_grep_list_sorted i686_grep_list_sorted

< ./arch/arm/include/asm/fb.h:static inline int fb_is_primary_device(struct fb_info *info)
---
> ./arch/x86/include/asm/fb.h:extern int fb_is_primary_device(struct fb_info *info);
110d109
< ./include/video/atmel_lcdc.h: struct fb_info *info;
')

ARMV6H: Detailed output of grep -r 'struct fb_info' ./* | sort
$this->bbcode_second_pass_code('', '
./arch/arm/include/asm/fb.h:static inline int fb_is_primary_device(struct fb_info *info)
./include/asm-generic/fb.h:static inline int fb_is_primary_device(struct fb_info *info)
./include/drm/drm_fb_helper.h: struct fb_info *info);
./include/drm/drm_fb_helper.h: struct fb_info *info);
./include/drm/drm_fb_helper.h: struct fb_info *fbdev;
./include/drm/drm_fb_helper.h:int drm_fb_helper_blank(int blank, struct fb_info *info);
./include/drm/drm_fb_helper.h:int drm_fb_helper_debug_enter(struct fb_info *info);
./include/drm/drm_fb_helper.h:int drm_fb_helper_debug_leave(struct fb_info *info);
./include/drm/drm_fb_helper.h:int drm_fb_helper_set_par(struct fb_info *info);
./include/drm/drm_fb_helper.h:int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info);
./include/drm/drm_fb_helper.h:void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch,
./include/drm/drm_fb_helper.h:void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper,
./include/linux/amba/clcd.h: struct fb_info fb;
./include/linux/backlight.h: int (*check_fb)(struct backlight_device *, struct fb_info *);
./include/linux/backlight.h:struct fb_info;
./include/linux/fb.h: struct fb_info *info);
./include/linux/fb.h: unsigned blue, unsigned transp, struct fb_info *info);
./include/linux/fb.h: struct fb_info *info, const char *mode_option,
./include/linux/fb.h: struct fb_info *info);
./include/linux/fb.h: int (*fb_blank)(int blank, struct fb_info *info);
./include/linux/fb.h: int (*fb_check_var)(struct fb_var_screeninfo *var, struct fb_info *info);
./include/linux/fb.h: int (*fb_compat_ioctl)(struct fb_info *info, unsigned cmd,
./include/linux/fb.h: int (*fb_cursor) (struct fb_info *info, struct fb_cursor *cursor);
./include/linux/fb.h: int (*fb_debug_enter)(struct fb_info *info);
./include/linux/fb.h: int (*fb_debug_leave)(struct fb_info *info);
./include/linux/fb.h: int (*fb_get_tilemax)(struct fb_info *info);
./include/linux/fb.h: int (*fb_ioctl)(struct fb_info *info, unsigned int cmd,
./include/linux/fb.h: int (*fb_mmap)(struct fb_info *info, struct vm_area_struct *vma);
./include/linux/fb.h: int (*fb_open)(struct fb_info *info, int user);
./include/linux/fb.h: int (*fb_pan_display)(struct fb_var_screeninfo *var, struct fb_info *info);
./include/linux/fb.h: int (*fb_release)(struct fb_info *info, int user);
./include/linux/fb.h: int (*fb_set_par)(struct fb_info *info);
./include/linux/fb.h: int (*fb_setcmap)(struct fb_cmap *cmap, struct fb_info *info);
./include/linux/fb.h: int (*fb_sync)(struct fb_info *info);
./include/linux/fb.h: ssize_t (*fb_read)(struct fb_info *info, char __user *buf,
./include/linux/fb.h: ssize_t (*fb_write)(struct fb_info *info, const char __user *buf,
./include/linux/fb.h: struct fb_info *info;
./include/linux/fb.h: void (*deferred_io)(struct fb_info *info, struct list_head *pagelist);
./include/linux/fb.h: void (*fb_copyarea) (struct fb_info *info, const struct fb_copyarea *region);
./include/linux/fb.h: void (*fb_destroy)(struct fb_info *info);
./include/linux/fb.h: void (*fb_fillrect) (struct fb_info *info, const struct fb_fillrect *rect);
./include/linux/fb.h: void (*fb_get_caps)(struct fb_info *info, struct fb_blit_caps *caps,
./include/linux/fb.h: void (*fb_imageblit) (struct fb_info *info, const struct fb_image *image);
./include/linux/fb.h: void (*fb_rotate)(struct fb_info *info, int angle);
./include/linux/fb.h: void (*fb_settile)(struct fb_info *info, struct fb_tilemap *map);
./include/linux/fb.h: void (*fb_tileblit)(struct fb_info *info, struct fb_tileblit *blit);
./include/linux/fb.h: void (*fb_tilecopy)(struct fb_info *info, struct fb_tilearea *area);
./include/linux/fb.h: void (*fb_tilecursor)(struct fb_info *info,
./include/linux/fb.h: void (*fb_tilefill)(struct fb_info *info, struct fb_tilerect *rect);
./include/linux/fb.h: void (*first_io)(struct fb_info *info);
./include/linux/fb.h: void (*readio) (struct fb_info *info, void *dst, void __iomem *src, unsigned int size);
./include/linux/fb.h: void (*writeio)(struct fb_info *info, void __iomem *dst, void *src, unsigned int size);
./include/linux/fb.h:extern char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size);
./include/linux/fb.h:extern int fb_blank(struct fb_info *info, int blank);
./include/linux/fb.h:extern int fb_init_device(struct fb_info *fb_info);
./include/linux/fb.h:extern int fb_new_modelist(struct fb_info *info);
./include/linux/fb.h:extern int fb_pan_display(struct fb_info *info, struct fb_var_screeninfo *var);
./include/linux/fb.h:extern int fb_prepare_logo(struct fb_info *fb_info, int rotate);
./include/linux/fb.h:extern int fb_set_cmap(struct fb_cmap *cmap, struct fb_info *fb_info);
./include/linux/fb.h:extern int fb_set_user_cmap(struct fb_cmap_user *cmap, struct fb_info *fb_info);
./include/linux/fb.h:extern int fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var);
./include/linux/fb.h:extern int fb_show_logo(struct fb_info *fb_info, int rotate);
./include/linux/fb.h:extern int fbmon_dpms(const struct fb_info *fb_info);
./include/linux/fb.h:extern int lock_fb_info(struct fb_info *info);
./include/linux/fb.h:extern int register_framebuffer(struct fb_info *fb_info);
./include/linux/fb.h:extern int unlink_framebuffer(struct fb_info *fb_info);
./include/linux/fb.h:extern int unregister_framebuffer(struct fb_info *fb_info);
./include/linux/fb.h:extern ssize_t fb_sys_read(struct fb_info *info, char __user *buf,
./include/linux/fb.h:extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
./include/linux/fb.h:extern struct fb_info *framebuffer_alloc(size_t size, struct device *dev);
./include/linux/fb.h:extern struct fb_info *registered_fb[FB_MAX];
./include/linux/fb.h:extern void cfb_copyarea(struct fb_info *info, const struct fb_copyarea *area);
./include/linux/fb.h:extern void cfb_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
./include/linux/fb.h:extern void cfb_imageblit(struct fb_info *info, const struct fb_image *image);
./include/linux/fb.h:extern void fb_bl_default_curve(struct fb_info *fb_info, u8 off, u8 min, u8 max);
./include/linux/fb.h:extern void fb_cleanup_device(struct fb_info *head);
./include/linux/fb.h:extern void fb_deferred_io_cleanup(struct fb_info *info);
./include/linux/fb.h:extern void fb_deferred_io_init(struct fb_info *info);
./include/linux/fb.h:extern void fb_deferred_io_open(struct fb_info *info,
./include/linux/fb.h:extern void fb_set_suspend(struct fb_info *info, int state);
./include/linux/fb.h:extern void framebuffer_release(struct fb_info *info);
./include/linux/fb.h:extern void sys_copyarea(struct fb_info *info, const struct fb_copyarea *area);
./include/linux/fb.h:extern void sys_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
./include/linux/fb.h:extern void sys_imageblit(struct fb_info *info, const struct fb_image *image);
./include/linux/fb.h:static inline bool fb_be_math(struct fb_info *info)
./include/linux/fb.h:static inline void unlock_fb_info(struct fb_info *info)
./include/linux/fb.h:struct fb_info {
./include/linux/fb.h:struct fb_info;
./include/linux/lcd.h: int (*check_fb)(struct lcd_device *, struct fb_info *);
./include/linux/lcd.h:struct fb_info;
./include/linux/platform_data/video-ep93xx.h: void (*blank)(int blank_mode, struct fb_info *info);
./include/linux/platform_data/video-ep93xx.h:struct fb_info;
./include/linux/platform_data/video-msm_fb.h: int (*blit)(struct mdp_device *mdp, struct fb_info *fb,
./include/linux/platform_data/video-msm_fb.h:struct fb_info;
./include/linux/platform_data/video-pxafb.h: void (*smart_update)(struct fb_info *);
./include/linux/platform_data/video-pxafb.h:extern int pxafb_smart_flush(struct fb_info *info);
./include/linux/platform_data/video-pxafb.h:extern int pxafb_smart_queue(struct fb_info *info, uint16_t *cmds, int);
./include/linux/platform_data/video-pxafb.h:static inline int pxafb_smart_flush(struct fb_info *info)
./include/linux/platform_data/video-pxafb.h:static inline int pxafb_smart_queue(struct fb_info *info,
./include/linux/pwm_backlight.h: int (*check_fb)(struct device *dev, struct fb_info *info);
./include/linux/svga.h:int svga_get_tilemax(struct fb_info *info);
./include/linux/svga.h:void svga_get_caps(struct fb_info *info, struct fb_blit_caps *caps,
./include/linux/svga.h:void svga_settile(struct fb_info *info, struct fb_tilemap *map);
./include/linux/svga.h:void svga_tileblit(struct fb_info *info, struct fb_tileblit *blit);
./include/linux/svga.h:void svga_tilecopy(struct fb_info *info, struct fb_tilearea *area);
./include/linux/svga.h:void svga_tilecursor(void __iomem *regbase, struct fb_info *info, struct fb_tilecursor *cursor);
./include/linux/svga.h:void svga_tilefill(struct fb_info *info, struct fb_tilerect *rect);
./include/linux/vga_switcheroo.h: struct fb_info *info);
./include/linux/vga_switcheroo.h:static inline void vga_switcheroo_client_fb_set(struct pci_dev *dev, struct fb_info *info) {}
./include/video/atmel_lcdc.h: struct fb_info *info;
./include/video/auo_k190xfb.h: int (*setup_irq)(struct fb_info *);
./include/video/auo_k190xfb.h: struct fb_info *info;
./include/video/broadsheetfb.h: int (*setup_irq)(struct fb_info *);
./include/video/broadsheetfb.h: struct fb_info *info;
./include/video/exynos_mipi_dsim.h: int (*get_fb_frame_done)(struct fb_info *info);
./include/video/exynos_mipi_dsim.h: void (*trigger)(struct fb_info *info);
./include/video/hecubafb.h: struct fb_info *info;
./include/video/mbxfb.h: int (*probe)(struct fb_info *fb);
./include/video/mbxfb.h: int (*remove)(struct fb_info *fb);
./include/video/mbxfb.h:struct fb_info;
./include/video/metronomefb.h: int (*setup_irq)(struct fb_info *);
./include/video/metronomefb.h: struct fb_info *host_fbinfo; /* the host LCD controller's fbi */
./include/video/metronomefb.h: struct fb_info *info;
./include/video/platform_lcd.h: int (*match_fb)(struct plat_lcd_data *, struct fb_info *);
./include/video/platform_lcd.h:struct fb_info;
./include/video/pxa168fb.h: struct fb_info *info;
./include/video/sstfb.h: int (*detect) (struct fb_info *info);
./include/video/sstfb.h: int (*set_pll) (struct fb_info *info, const struct pll_timing *t, const int clock);
./include/video/sstfb.h: void (*set_vidmod) (struct fb_info *info, const int bpp);
./include/video/udlfb.h: struct fb_info *info;
')

i686: Detailed output of grep -r 'struct fb_info' ./* | sort
$this->bbcode_second_pass_code('', '
./arch/x86/include/asm/fb.h:extern int fb_is_primary_device(struct fb_info *info);
./include/asm-generic/fb.h:static inline int fb_is_primary_device(struct fb_info *info)
./include/drm/drm_fb_helper.h: struct fb_info *info);
./include/drm/drm_fb_helper.h: struct fb_info *info);
./include/drm/drm_fb_helper.h: struct fb_info *fbdev;
./include/drm/drm_fb_helper.h:int drm_fb_helper_blank(int blank, struct fb_info *info);
./include/drm/drm_fb_helper.h:int drm_fb_helper_debug_enter(struct fb_info *info);
./include/drm/drm_fb_helper.h:int drm_fb_helper_debug_leave(struct fb_info *info);
./include/drm/drm_fb_helper.h:int drm_fb_helper_set_par(struct fb_info *info);
./include/drm/drm_fb_helper.h:int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info);
./include/drm/drm_fb_helper.h:void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch,
./include/drm/drm_fb_helper.h:void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper,
./include/linux/amba/clcd.h: struct fb_info fb;
./include/linux/backlight.h: int (*check_fb)(struct backlight_device *, struct fb_info *);
./include/linux/backlight.h:struct fb_info;
./include/linux/fb.h: struct fb_info *info);
./include/linux/fb.h: unsigned blue, unsigned transp, struct fb_info *info);
./include/linux/fb.h: struct fb_info *info, const char *mode_option,
./include/linux/fb.h: struct fb_info *info);
./include/linux/fb.h: int (*fb_blank)(int blank, struct fb_info *info);
./include/linux/fb.h: int (*fb_check_var)(struct fb_var_screeninfo *var, struct fb_info *info);
./include/linux/fb.h: int (*fb_compat_ioctl)(struct fb_info *info, unsigned cmd,
./include/linux/fb.h: int (*fb_cursor) (struct fb_info *info, struct fb_cursor *cursor);
./include/linux/fb.h: int (*fb_debug_enter)(struct fb_info *info);
./include/linux/fb.h: int (*fb_debug_leave)(struct fb_info *info);
./include/linux/fb.h: int (*fb_get_tilemax)(struct fb_info *info);
./include/linux/fb.h: int (*fb_ioctl)(struct fb_info *info, unsigned int cmd,
./include/linux/fb.h: int (*fb_mmap)(struct fb_info *info, struct vm_area_struct *vma);
./include/linux/fb.h: int (*fb_open)(struct fb_info *info, int user);
./include/linux/fb.h: int (*fb_pan_display)(struct fb_var_screeninfo *var, struct fb_info *info);
./include/linux/fb.h: int (*fb_release)(struct fb_info *info, int user);
./include/linux/fb.h: int (*fb_set_par)(struct fb_info *info);
./include/linux/fb.h: int (*fb_setcmap)(struct fb_cmap *cmap, struct fb_info *info);
./include/linux/fb.h: int (*fb_sync)(struct fb_info *info);
./include/linux/fb.h: ssize_t (*fb_read)(struct fb_info *info, char __user *buf,
./include/linux/fb.h: ssize_t (*fb_write)(struct fb_info *info, const char __user *buf,
./include/linux/fb.h: struct fb_info *info;
./include/linux/fb.h: void (*deferred_io)(struct fb_info *info, struct list_head *pagelist);
./include/linux/fb.h: void (*fb_copyarea) (struct fb_info *info, const struct fb_copyarea *region);
./include/linux/fb.h: void (*fb_destroy)(struct fb_info *info);
./include/linux/fb.h: void (*fb_fillrect) (struct fb_info *info, const struct fb_fillrect *rect);
./include/linux/fb.h: void (*fb_get_caps)(struct fb_info *info, struct fb_blit_caps *caps,
./include/linux/fb.h: void (*fb_imageblit) (struct fb_info *info, const struct fb_image *image);
./include/linux/fb.h: void (*fb_rotate)(struct fb_info *info, int angle);
./include/linux/fb.h: void (*fb_settile)(struct fb_info *info, struct fb_tilemap *map);
./include/linux/fb.h: void (*fb_tileblit)(struct fb_info *info, struct fb_tileblit *blit);
./include/linux/fb.h: void (*fb_tilecopy)(struct fb_info *info, struct fb_tilearea *area);
./include/linux/fb.h: void (*fb_tilecursor)(struct fb_info *info,
./include/linux/fb.h: void (*fb_tilefill)(struct fb_info *info, struct fb_tilerect *rect);
./include/linux/fb.h: void (*first_io)(struct fb_info *info);
./include/linux/fb.h: void (*readio) (struct fb_info *info, void *dst, void __iomem *src, unsigned int size);
./include/linux/fb.h: void (*writeio)(struct fb_info *info, void __iomem *dst, void *src, unsigned int size);
./include/linux/fb.h:extern char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size);
./include/linux/fb.h:extern int fb_blank(struct fb_info *info, int blank);
./include/linux/fb.h:extern int fb_init_device(struct fb_info *fb_info);
./include/linux/fb.h:extern int fb_new_modelist(struct fb_info *info);
./include/linux/fb.h:extern int fb_pan_display(struct fb_info *info, struct fb_var_screeninfo *var);
./include/linux/fb.h:extern int fb_prepare_logo(struct fb_info *fb_info, int rotate);
./include/linux/fb.h:extern int fb_set_cmap(struct fb_cmap *cmap, struct fb_info *fb_info);
./include/linux/fb.h:extern int fb_set_user_cmap(struct fb_cmap_user *cmap, struct fb_info *fb_info);
./include/linux/fb.h:extern int fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var);
./include/linux/fb.h:extern int fb_show_logo(struct fb_info *fb_info, int rotate);
./include/linux/fb.h:extern int fbmon_dpms(const struct fb_info *fb_info);
./include/linux/fb.h:extern int lock_fb_info(struct fb_info *info);
./include/linux/fb.h:extern int register_framebuffer(struct fb_info *fb_info);
./include/linux/fb.h:extern int unlink_framebuffer(struct fb_info *fb_info);
./include/linux/fb.h:extern int unregister_framebuffer(struct fb_info *fb_info);
./include/linux/fb.h:extern ssize_t fb_sys_read(struct fb_info *info, char __user *buf,
./include/linux/fb.h:extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
./include/linux/fb.h:extern struct fb_info *framebuffer_alloc(size_t size, struct device *dev);
./include/linux/fb.h:extern struct fb_info *registered_fb[FB_MAX];
./include/linux/fb.h:extern void cfb_copyarea(struct fb_info *info, const struct fb_copyarea *area);
./include/linux/fb.h:extern void cfb_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
./include/linux/fb.h:extern void cfb_imageblit(struct fb_info *info, const struct fb_image *image);
./include/linux/fb.h:extern void fb_bl_default_curve(struct fb_info *fb_info, u8 off, u8 min, u8 max);
./include/linux/fb.h:extern void fb_cleanup_device(struct fb_info *head);
./include/linux/fb.h:extern void fb_deferred_io_cleanup(struct fb_info *info);
./include/linux/fb.h:extern void fb_deferred_io_init(struct fb_info *info);
./include/linux/fb.h:extern void fb_deferred_io_open(struct fb_info *info,
./include/linux/fb.h:extern void fb_set_suspend(struct fb_info *info, int state);
./include/linux/fb.h:extern void framebuffer_release(struct fb_info *info);
./include/linux/fb.h:extern void sys_copyarea(struct fb_info *info, const struct fb_copyarea *area);
./include/linux/fb.h:extern void sys_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
./include/linux/fb.h:extern void sys_imageblit(struct fb_info *info, const struct fb_image *image);
./include/linux/fb.h:static inline bool fb_be_math(struct fb_info *info)
./include/linux/fb.h:static inline void unlock_fb_info(struct fb_info *info)
./include/linux/fb.h:struct fb_info {
./include/linux/fb.h:struct fb_info;
./include/linux/lcd.h: int (*check_fb)(struct lcd_device *, struct fb_info *);
./include/linux/lcd.h:struct fb_info;
./include/linux/platform_data/video-ep93xx.h: void (*blank)(int blank_mode, struct fb_info *info);
./include/linux/platform_data/video-ep93xx.h:struct fb_info;
./include/linux/platform_data/video-msm_fb.h: int (*blit)(struct mdp_device *mdp, struct fb_info *fb,
./include/linux/platform_data/video-msm_fb.h:struct fb_info;
./include/linux/platform_data/video-pxafb.h: void (*smart_update)(struct fb_info *);
./include/linux/platform_data/video-pxafb.h:extern int pxafb_smart_flush(struct fb_info *info);
./include/linux/platform_data/video-pxafb.h:extern int pxafb_smart_queue(struct fb_info *info, uint16_t *cmds, int);
./include/linux/platform_data/video-pxafb.h:static inline int pxafb_smart_flush(struct fb_info *info)
./include/linux/platform_data/video-pxafb.h:static inline int pxafb_smart_queue(struct fb_info *info,
./include/linux/pwm_backlight.h: int (*check_fb)(struct device *dev, struct fb_info *info);
./include/linux/svga.h:int svga_get_tilemax(struct fb_info *info);
./include/linux/svga.h:void svga_get_caps(struct fb_info *info, struct fb_blit_caps *caps,
./include/linux/svga.h:void svga_settile(struct fb_info *info, struct fb_tilemap *map);
./include/linux/svga.h:void svga_tileblit(struct fb_info *info, struct fb_tileblit *blit);
./include/linux/svga.h:void svga_tilecopy(struct fb_info *info, struct fb_tilearea *area);
./include/linux/svga.h:void svga_tilecursor(void __iomem *regbase, struct fb_info *info, struct fb_tilecursor *cursor);
./include/linux/svga.h:void svga_tilefill(struct fb_info *info, struct fb_tilerect *rect);
./include/linux/vga_switcheroo.h: struct fb_info *info);
./include/linux/vga_switcheroo.h:static inline void vga_switcheroo_client_fb_set(struct pci_dev *dev, struct fb_info *info) {}
./include/video/auo_k190xfb.h: int (*setup_irq)(struct fb_info *);
./include/video/auo_k190xfb.h: struct fb_info *info;
./include/video/broadsheetfb.h: int (*setup_irq)(struct fb_info *);
./include/video/broadsheetfb.h: struct fb_info *info;
./include/video/exynos_mipi_dsim.h: int (*get_fb_frame_done)(struct fb_info *info);
./include/video/exynos_mipi_dsim.h: void (*trigger)(struct fb_info *info);
./include/video/hecubafb.h: struct fb_info *info;
./include/video/mbxfb.h: int (*probe)(struct fb_info *fb);
./include/video/mbxfb.h: int (*remove)(struct fb_info *fb);
./include/video/mbxfb.h:struct fb_info;
./include/video/metronomefb.h: int (*setup_irq)(struct fb_info *);
./include/video/metronomefb.h: struct fb_info *host_fbinfo; /* the host LCD controller's fbi */
./include/video/metronomefb.h: struct fb_info *info;
./include/video/platform_lcd.h: int (*match_fb)(struct plat_lcd_data *, struct fb_info *);
./include/video/platform_lcd.h:struct fb_info;
./include/video/pxa168fb.h: struct fb_info *info;
./include/video/sstfb.h: int (*detect) (struct fb_info *info);
./include/video/sstfb.h: int (*set_pll) (struct fb_info *info, const struct pll_timing *t, const int clock);
./include/video/sstfb.h: void (*set_vidmod) (struct fb_info *info, const int bpp);
./include/video/udlfb.h: struct fb_info *info;
')
dreamlocked
 
Posts: 5
Joined: Mon Apr 28, 2014 5:27 am

Re: fbtft module fails to build under armv6h (but works on i

Postby dreamlocked » Mon Apr 28, 2014 11:48 pm

Unfortunately, editing the /arch/arm/include/asm/fb.h file did not alter the build error.
Must be something else.
dreamlocked
 
Posts: 5
Joined: Mon Apr 28, 2014 5:27 am

Re: fbtft module fails to build under armv6h (but works on i

Postby WarheadsSE » Tue Apr 29, 2014 12:20 am

No... that function was defined differently, that is not the struct itself.
Core Developer
Remember: Arch Linux ARM is entirely community donation supported!
WarheadsSE
Developer
 
Posts: 6807
Joined: Mon Oct 18, 2010 2:12 pm

Re: fbtft module fails to build under armv6h (but works on i

Postby dreamlocked » Tue Apr 29, 2014 2:49 am

Ok, I think I found what's wrong. The kernel module fb_backlight is not set.

On i686
$this->bbcode_second_pass_code('', '
$ grep -r CONFIG_FB_BACKLIGHT ./*

include/uapi/linux/fb.h:#ifdef CONFIG_FB_BACKLIGHT
include/config/auto.conf:CONFIG_FB_BACKLIGHT=y
include/generated/autoconf.h:#define CONFIG_FB_BACKLIGHT 1
include/linux/fb.h:#ifdef CONFIG_FB_BACKLIGHT
.config:CONFIG_FB_BACKLIGHT=y
')

On armv6h
$this->bbcode_second_pass_code('', '
$ grep -r CONFIG_FB_BACKLIGHT

.config:# CONFIG_FB_BACKLIGHT is not set
include/uapi/linux/fb.h:#ifdef CONFIG_FB_BACKLIGHT
include/linux/fb.h:#ifdef CONFIG_FB_BACKLIGHT
')

This would probably explain the errors complaining about 'bl_dev'. Indeed, CONFIG_FB_BACKLIGHT is required for it to be defined.
In include/linux/fb.h:
$this->bbcode_second_pass_code('', '
#ifdef CONFIG_FB_BACKLIGHT
/* assigned backlight device */
/* set before framebuffer registration,
remove after unregister */
struct backlight_device *bl_dev;

/* Backlight level curve */
struct mutex bl_curve_mutex;
u8 bl_curve[FB_BACKLIGHT_LEVELS];
#endif
')

Thanks again for pointing in the right direction.
dreamlocked
 
Posts: 5
Joined: Mon Apr 28, 2014 5:27 am


Return to ARMv6h

Who is online

Users browsing this forum: No registered users and 7 guests