1. 程式人生 > >6818開發板uboot、kernel、rootfs編譯記錄

6818開發板uboot、kernel、rootfs編譯記錄

目錄

前言

因為前面編譯過一次6818的uboot、kernel和rootfs。但是是在root使用者下編譯的,結果在開發板上執行出現錯誤。文件上寫必須在普通使用者,所以又在普通使用者下重新編譯一次。但是因為沒有及時記錄下編譯過程,結果又要重新造輪子,效率更低!

編譯環境介紹

  • ubuntu : ubuntu16.04
  • uboot : u-boot-2014.07
  • kernel : kernel-3.4.39
  • toolchain : gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf

uboot編譯記錄

  • 問題:
soft
-float & VFP hard
  • 解決方法:
    預設u-boot的編譯要支援arm-linux-guneabihf-編譯器編譯需要修改一些選項。
    具體:參見連結
    在這個連結中,介紹要修改arch/arm/cpu/armv7/config.mk中的語句如下:
PLATFORM_RELFLAGS += -fno-common --ffixed-r8 -msoft-float

修改為

PLATFORM_RELFLAGS += -fno-common --ffixed-r8 -mfloat-abi=hard

但是,我的uboot下沒有armv7這個目錄,然後我在arch/arm/config.mk

中發現如下語句:

PLATFORM_RELFLAGS += $(call cc-option, **-msoft-abi=float**) \
      $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))

修改為:

PLATFORM_RELFLAGS += $(call cc-option, **-msoft-abi=hard**) \
      $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps
,))

然後,再次編譯,順利通過。

kernel編譯記錄

kernel新增攝像頭驅動

kernel的編譯沒有出現問題,主要我需要kernel支援usb攝像頭驅動。這裡我的開發板說是支援羅技C270,然後我找到這篇 linux下通過V4L2驅動USB攝像頭,詳解請檢視這篇部落格。我需要做的就是新增上這個驅動模組
具體過程如下:
kernelmake menuconfig,然後找到:

Device Drivers --->
    Multimedia support  --->
        Video capture adapters  --->
             V4L USB devices  ---
                 USB Video Class (UVC)

選擇編譯<Y>或者M,然後儲存
最後編譯即可。注意:如果你的核心有預設的config檔案,而每次編譯都會直接載入預設的config檔案,這時候我們的配置.conifg會被預設載入的config檔案而覆蓋,結果就是我們的配置沒有生效。所以要注意!

配置成功後的核心,在羅技C270USB攝像頭插入,secureCRT列印如下:

[14706.500000] usb 1-1.3: new high-speed USB device number 4 using nxp-ehci
[14706.806000] usb 1-1.3: New USB device found, idVendor=046d, idProduct=0825
[14706.807000] usb 1-1.3: New USB device strings: Mfr=0, Product=0, SerialNumber=2
[14706.814000] usb 1-1.3: SerialNumber: 77A9EA40
[14706.820000] uvcvideo: Found UVC 1.00 device <unnamed> (046d:0825)
[14706.916000] input: **UVC Camera (046d:0825)** as /devices/platform/nxp-ehci/usb1/1-1/1-1.3/1-1.3:1.0/**input/input7**

後期,對USB攝像頭的操作繼續補充!

kernel新增HDMI介面驅動

因為開發板是支援HDMI輸出的,但是博主直接使用HDMI的轉接頭外接顯示屏的時候,沒有輸出。查詢s5p4418 s5p6818純hdmi顯示輸出配置(支援ubuntu、qt)後發現,如果選擇HDMI顯示輸出,LCD屏將無法顯示。也就是說HDMI和LCD顯示只能選擇一種,預設是LCD顯示。所以,博主需要重新編譯核心,使得核心執行HDMI輸出顯示。
博主記:雖然添加了HDMI驅動,但是預設仍然是LCD顯示,導致HDMI無法正常輸出。博主以為是HDMI驅動的問題,但是今天想想也可能是uboot的引數的問題,最後通過設定bootargs解決。

kernel新增OV5645(MIPI)介面驅動

博主需要接入OV5645MIPI介面的驅動,主要原因是核心支援OV5645的驅動,博主需要做的就是在核心中新增OV5645驅動,在網上查詢並沒有找到6818OV5645的驅動放置位置,但是6818的開發文件中說明是支援OV5645的,配置核心的步驟如下:
1. 博主查詢榮品四核S5P4418開發板之攝像頭OV5645除錯中說明驅動檔案是ov5645.c,於是在核心中使用find -name ov5645.c找到了ov5645.c的路徑如下:./drivers/media/video/ov5645.c

  1. 進入./drivers/media/video目錄下查詢到如下:
config VIDEO_OV5645
   tristate "ov5645 mipi camera support"                                                                          
   depends on VIDEO_V4L2 && I2C
   help
     This is a V4L2 camera driver for the OmniVision OV5645 sensor

說明在make menuconfig中我們只要找到config_VIDEO_OV5645然後進行配置即可。
3. 在核心目錄下進入make menuconfig,按下/鍵,搜尋config_VIDEO_OV5645即可找到對應的驅動的位置。

Symbol: VIDEO_OV5645 [=n]                                                                                                                                                                            │  
  │ Type  : tristate                                                                                                                                                                                     │  
  │ Prompt: ov5645 mipi camera support                                                                                                                                                                   │  
  │   Defined at drivers/media/video/Kconfig:659                                                                                                                                                         │  
  │   Depends on: MEDIA_SUPPORT [=y] && VIDEO_CAPTURE_DRIVERS [=y] && VIDEO_V4L2 [=y] && I2C [=y] && !VIDEO_HELPER_CHIPS_AUTO [=n]                                                                       │  
  │   Location:                                                                                                                                                                                          │  
  │     -> Device Drivers                                                                                                                                                                                │  
  │       -> Multimedia support (MEDIA_SUPPORT [=y])                                                                                                                                                     │  
  │         -> Video capture adapters (VIDEO_CAPTURE_DRIVERS [=y])                                                                                                                                       │  
  │           -> Encoders, decoders, sensors and other helper chips 

rootfs編譯記錄

  • 問題:
In file included from ../ncurses/curses.priv.h:283:0,
                 from ../ncurses/lib_gen.c:19:
_92932.c:835:15: error: expected ')' before 'int'
../include/curses.h:1594:56: note: in definition of macro ‘mouse_trafo’
#define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen)  ^
Makefile:790: recipe for target '../objects/lib_gen.o' failed
  • 解決方法:
    參見連結,文中指出找到ncurses目錄,我通過find -name "curses.priv.h"找到了ncurses目錄。具體如下:
rootfs/output/build/host-ncurses-5.9

然後在這個目錄下進入include目錄:

vi curses.h

搜尋mouse_trafo,然後去除後面一行的註釋:generated

extern NCURSES_EXPORT(bool)    mouse_trafo (int*, int*, bool);   **/* generated */**

然後vi curses.tail
通過找到mouse_trafo,然後去除後面的註釋/*generated*/

extern NCURSES_EXPORT(bool)    wmouse_trafo (const WINDOW*, int*, int*, bool);
extern NCURSES_EXPORT(bool)    mouse_trafo (int*, int*, bool);   /* generated */

最後,編譯即可。

總結

感覺開發就是沒有成功之前,哪裡都是問題,成功了之後,什麼問題都不是問題!此處有滑稽表情!當時真是腦子抽了選了研發!

參考連結