基于友善的superboot 移植linux内核到tiny210(s5pv210)上
?友善提供的開發板光盤里已經提供了友善官方移植的內核,但是為了自己的開發方便,并且防止受到友善的干擾,移植一個基于友善的super boot的內核。
???super-boot(友善官方提供)
???內核(3.4.2)
???根文件系統nfs(韋老師提供,網上很多)
?
1. super-boot 參數配置
友善的super-boot是不開源的,但是我們可以修改其提供的參數bootargs來修改啟動命令:
修改命令如下:
################### Linux #################### Linux-BootLoader = Superboot210.bin Linux-Kernel = Linux/zImage #Linux-CommandLine = root=/dev/mtdblock4 rootfstype=yaffs2 console=ttySAC0,115200 init=/linuxrc skipcali=yes ctp=3 Linux-CommandLine = console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.1.5:/home/book/Codes/fs_mini_mdev_new ip=192.168.1.230:192.168.1.5:192.168.1.5:255.255.255.0:linux.arm9.net:eth0:off skipcali=yes ctp=3 #Linux-RootFs-InstallImage = Linux/rootfs_qtopia_qt4-mlc2.img
其中# 是注釋符號 ,這里的參數配置時一定要細心。
?
2.? 移植新版本的內核。
從kernel org 中下載下來最新的內核:
2.1. 解壓下來后修改根目錄下的Makefile :
ARCH ?= arm CROSS_COMPILE ?= arm-linux-
2.2.修改配置,使用和tiny210最相似的開發板配置.執行如下命令:
2.3. 執行make 命令生成zImage
這里用于生成對應superboot的鏡像,因此必須生成zImage
?
2.4. 修改內核串口配置
經過上面三步的命令后,就可以燒寫和啟動kernel了,但是此時終端上除了打印loading kernel之外就再無打印信息了,原因是kernel默認的串口是串口1,需要將
其改為串口0,執行make menuconfig,修改串口配置:
system type(0) S3C UART to use for low-level messages編輯此項為0 ,此時重新燒寫zImage ,就能看到終端輸出了。
?
2.5. 修改機器碼
經過上面的步驟之后,終端會有輸出,但是輸出的信息會提示你機器碼不正確。
superboot在啟動內核時一開始會比較superboot中的機器碼和內核提供的機器碼是否匹配。顯然這里內核的機器碼和superboot中并不匹配
修改:內核支持的機器碼:
由于superboot不開源,所以只能修改內核中的機器碼:
打開include/generated/mach-types.h文件: 修改:
//#define MACH_TYPE_SMDKV210 2456 #define MACH_TYPE_SMDKV210 3466重新編譯燒寫,此時就能kernel就能正常跑下去了。
?
2.6 移植dm9000網卡驅動程序。
網卡驅動程序的移植其實很簡單,由于其接口是內存型接口,一般只要修改其中斷引腳號和內存片地址就行。
參考友善提供的mach-mini210.c修改:
arch\arm\mach-s5pv210\Mach-smdkv210.c
#define S5PV210_PA_DM9000_A (0x88001000) #define S5PV210_PA_DM9000_F (S5PV210_PA_DM9000_A + 0x300C)static struct resource smdkv210_dm9000_resources[] = {[0] = {.start = S5PV210_PA_DM9000_A,// 片選地址.end = S5PV210_PA_DM9000_A + SZ_1K*4 - 1,.flags = IORESOURCE_MEM,},[1] = {.start = S5PV210_PA_DM9000_F,.end = S5PV210_PA_DM9000_F + SZ_1K*4 - 1,.flags = IORESOURCE_MEM,},[2] = {.start = IRQ_EINT(7), // 中斷號.end = IRQ_EINT(7),.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,}, };static struct dm9000_plat_data smdkv210_dm9000_platdata = {.flags = DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM,.dev_addr = { 0x08, 0x90, 0x00, 0xa0, 0x02, 0x10 }, }; static struct platform_device smdkv210_dm9000 = {.name = "dm9000",.id = -1,.num_resources = ARRAY_SIZE(smdkv210_dm9000_resources),.resource = smdkv210_dm9000_resources,.dev = {.platform_data = &smdkv210_dm9000_platdata,}, }; static void __init smdkv210_dm9000_init(void) {unsigned int tmp;gpio_request(S5PV210_MP01(1), "nCS1"); // 這里需要修改s3c_gpio_cfgpin(S5PV210_MP01(1), S3C_GPIO_SFN(2)); gpio_free(S5PV210_MP01(1));tmp = (5 << S5P_SROM_BCX__TACC__SHIFT);__raw_writel(tmp, S5P_SROM_BC1);tmp = __raw_readl(S5P_SROM_BW);tmp &= (S5P_SROM_BW__CS_MASK << S5P_SROM_BW__NCS5__SHIFT);tmp |= (1 << S5P_SROM_BW__NCS1__SHIFT);__raw_writel(tmp, S5P_SROM_BW);}這里附上原理圖: 作為參照:
移植好網卡驅動程序,并且創建好你的根文件系統就能正常啟動了。
?
?
3?移植網絡文件系統
這部分網上資料很多,我直接拿的韋東山老師移植好的文件系統或者您也可以使用友善提供的qt的文件系統都是可以的。
?
?
?
?
?
?
?
?
?
?
?
?????
?總結
以上是生活随笔為你收集整理的基于友善的superboot 移植linux内核到tiny210(s5pv210)上的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实例6:python
- 下一篇: localdatetime 默认时间_d