本次主要是要新增一個samsung的芯片到u-boot中,網上查閱資料發現s5pc1xx是與手上的S5PV210的友善的Tiny版子寄存器兼容的比較多,所以就準備以他為基礎增加一個我的板子的支持到u-boot中。
step1
拷貝archarm目錄下的mach-s5pc1xx目錄修改名稱為mach-s5pv210,注意這里的mach-xxx后面的xxx的命令是和Kconfig文件一會的修改相關的。
step2
在archarmKconfig 文件中增加新的芯片這里參考s5pc1xx的內容
。
。
。
config ARCH_S5PC1XX
bool 'Samsung S5PC1XX'
select CPU_V7
select DM
select DM_SERIAL
select DM_GPIO
select DM_I2C
config ARCH_S5PV210
bool 'Samsung S5P210'
select CPU_V7
select DM
select DM_SERIAL
select DM_GPIO
select DM_I2C
。
。
。
step3
修改archarmmach-s5pv210目錄下的Kconfig為如下內容
if ARCH_S5PV210
choice
prompt 'Tiny board select'
optional
endchoice
config SYS_SOC
default 's5pv210'
endif
然后在archarmKconfig文件增加
。
。
。
source 'arch/arm/mach-s5pc1xx/Kconfig' 原來就有的
source 'arch/arm/mach-s5pv210/Kconfig' 增加的
。
。
。
step4
增加board文件,參考archarmmach-s5pc1xxKconfig 文件中,這個芯片支持的平臺,我這里選擇goni平臺作為參考拷貝boardsamsunggoni
到當前目錄修改名稱為boardsamsungtiny210;然后修改其中的Kconfig為如下內容
if TARGET_TINY210
config SYS_BOARD
default 'tiny210'
config SYS_VENDOR
default 'samsung'
config SYS_SOC
default 's5pv210'
config SYS_CONFIG_NAME
default 'Tiny210'
endif
返回去也就需要在前面拷貝修改后的archarmmach-s5pv210Kconfig文件中增加內容最后如下
if ARCH_S5PV210
choice
prompt 'Tiny board select'
optional
config TARGET_TINY210
bool 'S5P 210 board'
select OF_CONTROL
endchoice
config SYS_SOC
default 's5pv210'
source 'board/samsung/tiny210/Kconfig'
endif
注意這里的config SYS_SOC 的值就是和前面的mach-xxx后面的名字要一致。否則在make時候不會吧新增的SOC文件夾
step5
這樣還不夠還差一個頭文件并且這個頭文件的命名必須是boardsamsungtiny210Kconfig文件中的 SYS_CONFIG_NAME 選項的值 本例就是Tiny210.h
具體目錄是includeconfigs,最后就是增加默認配置文件tiny_defconfig,復制s5p_goni_defconfig為Tiny210_defconfig
然后執行
make distclean
make Tiny210_defconfig
make 進行編譯鏈接過程出錯
ch/arm/mach-s5pv210/built-in.o: In function `s5pc100_get_pll_clk':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/arch/arm/mach-s5pv210/clock.c:60: undefined reference to `s5p_cpu_id'
arch/arm/mach-s5pv210/built-in.o: In function `s5pc100_get_pclk':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/arch/arm/mach-s5pv210/clock.c:278: undefined reference to `s5p_cpu_id'
arch/arm/mach-s5pv210/built-in.o: In function `s5pc110_get_pclk':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/arch/arm/mach-s5pv210/clock.c:272: undefined reference to `s5p_cpu_id'
arch/arm/mach-s5pv210/built-in.o: In function `s5pc1xx_get_uart_clk':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/arch/arm/mach-s5pv210/clock.c:286: undefined reference to `s5p_cpu_id'
board/samsung/common/built-in.o: In function `set_board_info':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/board/samsung/common/misc.c:98: undefined reference to `s5p_cpu_rev'
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/board/samsung/common/misc.c:98: undefined reference to `s5p_cpu_id'
board/samsung/tiny210/built-in.o: In function `board_mmc_init':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/board/samsung/tiny210/s5p210.c:139: undefined reference to `s5p_cpu_id'
common/built-in.o: In function `cread_line':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/common/cli_readline.c:265: undefined reference to `get_tbclk'
common/built-in.o:(.data.init_sequence_f+0x40): undefined reference to `print_cpuinfo'
drivers/gpio/built-in.o: In function `s5p_gpio_get_bank':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/drivers/gpio/s5p_gpio.c:72: undefined reference to `s5p_cpu_id'
drivers/usb/gadget/built-in.o: In function `otg_phy_init':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/drivers/usb/gadget/dwc2_udc_otg_phy.c:76: undefined reference to `s5p_cpu_id'
lib/built-in.o: In function `tick_to_time':
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/lib/time.c:103: undefined reference to `get_tbclk'
/home/fmshwr/Desktop/Demo/u-boot-2017.01-wr/lib/time.c:103: undefined reference to `get_tbclk'
lib/built-in.o: In function `usec_to_tick':
在VScode中全局查找一下找不到的符號,發現在archarmcpuarmv7s5p-common目錄下的文件中定義了,所以看一下這個文件是否參與編譯執行
make V=1 發現這個文件夾未參與編譯查到arch/arm/cpu/armv7/Makefile 這個文件中發現如下一段內容
ifneq (,$(filter s5pc1xx exynos ,$(SOC)))
obj-y += s5p-common/
endif
現在肯定就是這一塊的內容導致該目錄未參與編譯了,所以很簡單增加我們新增的SOC到里如下
ifneq (,$(filter s5pc1xx exynos s5pv210,$(SOC)))
obj-y += s5p-common/
endif
在進行make成功生成u-boot.bin 目前工程配置基本算是可以開始調試了,后續需要在進行具體code的修改移植了。
總結
我新增芯片和板子的配置過程,我認為kbuild 的工作原理可以作為黑盒子看待會用就可以,明白他的配置過程就可以,就比如參考我前面的Kbuild的配置過程分析就可以知道在執行make xxx_defconfig 時實際匹配到了u-boot的頂層makefile文件中的特定規則,這個規則就是生成了Kbuild工具,他是一個主機可執行文件讀取u-boot下的所有Kconfig文件這些文件都是通過source “xxxxx”這種類似C語言中的include的操作原理類似的方式實現相互的引用最終生成了一個.config在工程的根目錄下并在make時生成config.h文件,這個文件中實際就是一些宏再由各個源文件引用后對目標代碼進行條件編譯最后實現裁剪。
上一篇:u-boot 移植 --->6、引導Linux啟動測試
下一篇:u-boot 移植 --->1、u-boot配置(Kbuild)
推薦閱讀最新更新時間:2025-04-24 22:43





設計資源 培訓 開發板 精華推薦
- MIC4576-5.0BT、8V-36V轉5V/3A降壓轉換器通孔典型應用電路
- LT3091HT7 正輸出電流監視器的典型應用
- 使用 Analog Devices 的 LT3091IT7 的參考設計
- LTC2259CUJ-14、14 位、80Msps 超低功耗 1.8V ADC 的典型應用
- LT8570EMS8E-1 1.5MHz、5V 至 12V 升壓轉換器的典型應用
- LM2902S 單電源運算放大器用作維恩橋振蕩器的典型應用電路
- TB67H303HG 大電流驅動有刷直流電機驅動器評估板
- 典型應用 升壓配置中的真正 PWM 調光 RT8452 用于降壓-升壓或降壓-升壓拓撲的高壓大電流 LED 驅動器控制器
- CN0276
- 使用 Microchip Technology 的 AT83C24B-PR 的參考設計