已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 内核配置和编译1 修改顶层MakefileARCH?= armCROSS_COMPILE?= arm-linux-根据自己的环境修改交叉编译器前缀2 修改arch/arm/boot/Makefile 增加一行echo Kernel: $ is readycp $ /tftpboot/根据自己的ftp服务器目录修改3 匹配机器码1) 启动u-boot执行bdinfo将输出开发板的相关信息,包括机器码TQ2440 # bdarch_number = 0x0000016A机器码362boot_params = 0x30000100DRAM bank = 0x00000000- start = 0x30000000- size = 0x04000000ethaddr = 00:01:02:03:04:05ip_addr = 00baudrate = 115200 bpsTLB addr = 0x33FF0000relocaddr = 0x33F40000reloc off = 0x33F40000irq_sp = 0x33B2FF68sp start = 0x33B2FF58FB base = 0x00000000TQ2440 # 2) 新版u-boot可以设置环境变量machid来更改机器码TQ2440 # set machid 0x16A3) 内核机器码:arch/arm/mach-s3c2440/mach-smdk2440.c MACHINE_START(S3C2440, SMDK2440)其中的S3C2440即为机器码再查看arch/arm/tools/mach-types 第379行即为S3C2440所对应的机器码362,必须和u-boot的机器码相同,否则没法启动内核4 修改系统时钟arch/arm/mach-s3c2440/mach-smdk2440.c 我们的开发板使用12MHZs3c24xx_init_clocks(12000000);5 执行默认配置rootzjh:/home/work/linux-# make s3c2410_defconfig6 配置内核rootzjh:/home/work/linux-# make menuconfigKernel Features - * Use the ARM EABI to compile the kernel * Allow old ABI binaries to run with this kernel (EXPERIMENTAL) 注:使用 4.X.X 版本的交叉编译器一定要选中以上两项,否则会出现Kernel panic - not syncing: Attempted to kill init! 这样的错误以致没法启动内核System Type - S3C2440 and S3C2442 Machines - * SMDK2440* SMDK2440 with S3C2440 CPU module 只选中这两项即可,其他的Machine都取消7 编译内核rootzjh:/home/work/linux-# make zImage OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is readyImage Name: linux-2.6.36Created: Wed Oct 17 12:42:19 2012Image Type: ARM Linux Kernel Image (uncompressed)Data Size: 2075944 Bytes = 2027.29 kB = 1.98 MBLoad Address: 30008000Entry Point: 300080008 启动u-boot,执行如下操作TQ2440 # tftp 30000000 uImageTQ2440 # bootm 30000000# Booting image at 30000000 . Image Name: linux-2.6.36 Created: 2012-10-17 4:33:02 UTC Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 2075944 Bytes = 2 MB Load Address: 30008000 Entry Point: 30008000 Verifying Checksum . OK XIP Kernel Image . OKStarting kernel .Uncompressing Linux. done, booting the kernel.Linux version (rootzjh) (gcc version 4.4.3 (ctng-1.6.1) ) #4 Wed Oct 17 12:32:51 CST 2012CPU: ARM920T 41129200 revision 0 (ARMv4T), cr=c0007177CPU: VIVT data cache, VIVT instruction cacheMachine: SMDK2440Memory policy: ECC disabled, Data cache writebackCPU S3C2440A (id 0x32440001)S3C24XX Clocks, Copyright 2004 Simtec ElectronicsS3C244X: core 400.000 MHz, memory 100.000 MHz, peripheral 50.000 MHz2、 DM9000网卡驱动移植1 修改arch/arm/mach-s3c2440/mach-smdk2440.c,构建DM9000平台设备#include #define MACH_TQ2440_DM9K_BASE (S3C2410_CS4 + 0x300)/* support DM9000 */static struct resource TQ2440_dm9k_resource = 0 = .start = MACH_TQ2440_DM9K_BASE,.end = MACH_TQ2440_DM9K_BASE + 3,.flags = IORESOURCE_MEM,1 = .start = MACH_TQ2440_DM9K_BASE + 4,.end = MACH_TQ2440_DM9K_BASE + 7,.flags = IORESOURCE_MEM,2 = .start = IRQ_EINT7,.end = IRQ_EINT7,.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,;/* * The DM9000 has no eeprom, and set its MAC address */static struct dm9000_plat_data TQ2440_dm9k_pdata = .flags= (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),.dev_addr = x00x11x22x33x44x66,;static struct platform_device TQ2440_device_eth = .name= dm9000,.id= -1,.num_resources= ARRAY_SIZE(TQ2440_dm9k_resource),.resource= TQ2440_dm9k_resource,.dev= .platform_data= &TQ2440_dm9k_pdata,;smdk2440_devices结构体数组添加如下代码&TQ2440_device_eth2 修改drivers/net/ethernet/davicom/dm9000.c第44行加入如下代码#include dm9000.h#if defined(CONFIG_ARCH_S3C2440) #include #endif第1375行加入如下代码u32 id_val;#if defined(CONFIG_ARCH_S3C2440) unsigned int oldval_bwscon = *(volatile unsigned int *)S3C2410_BWSCON; unsigned int oldval_bankcon4 = *(volatile unsigned int *)S3C2410_BANKCON4; #endif /* Init network device */第1387行加入如下代码dev_dbg(&pdev-dev, dm9000_probe()n);#if defined(CONFIG_ARCH_S3C2440)/* 设置Bank4:总线宽度为16,使能nWAIT */ *(volatile unsigned int *)S3C2410_BWSCON) = (oldval_bwscon & (3 Networking options - Packet socket Unix domain socket* TCP/IP networking* IP: multicasting * IP: kernel level autoconfiguration* IP: BOOTP supportDevice Drivers -* Network device support -* Ethernet (10 or 100Mbit) - DM9000 support File systems -* Network File Systems (NEW) - NFS client support * NFS client support for NFS version 3 (NEW)* NFS client support for the NFSv3 ACL protocol extension * Root file system on NFS4 重新编译内核并设置u-boot启动参数,通过NFS挂载根文件系统TQ2440 # set bootargs root=/dev/nfs nfsroot=:/home/work/rootfs ip=00 init=/linuxrc console=ttySAC0,115200TQ2440 # save5 下载内核并启动TQ2440 # tftp 30000000 uImageTQ2440 # bootm 30000000roottq2440 /#3、 移植内核自带的LED驱动1 在BSP文件arch/arm/mach-s3c2440/mach-smdk2440.c增加我们开发板的LED配置#include static struct gpio_led tq2440_leds = 0 = .name = led1,.gpio = S3C2410_GPB(5),.active_low = 1,1 = .name = led2,.gpio = S3C2410_GPB(6),.active_low = 1,2 = .name = led3,.gpio = S3C2410_GPB(7),.active_low = 1,3 = .name = led4,.gpio = S3C2410_GPB(8),.active_low = 1,;static struct gpio_led_platform_data tq2440_leds_pdata = .num_leds= ARRAY_SIZE(tq2440_leds),.leds = tq2440_leds,;static struct platform_device tq2440_device_leds = .name = leds-gpio,.id = -1,.dev= .platform_data = &tq2440_leds_pdata,;在smdk2440_devices平台数组中添加&tq2440_device_leds,2 配置内核Device Drivers -*- LED Support - LED Class Support LED Support for Samsung S3C24XX GPIO LEDs LED Support for GPIO connected LEDs* Platform device bindings for GPIO LEDs3 重新编译内核roottq2440 /# ll /sys/class/leds/total 0drwxr-xr-x 3 root root 0 Jan 1 00:00 led1drwxr-xr-x 3 root root 0 Jan 1 00:00 led2drwxr-xr-x 3 root root 0 Jan 1 00:00 led3drwxr-xr-x 3 root root 0 Jan 1 00:00 led4roottq2440 /# echo 1 sys/class/leds/led1/brightness 点亮LED1 roottq2440 /# echo 0 sys/class/leds/led1/brightness 熄灭LED14、 RTC驱动移植1 在arch/arm/mach-s3c2440/mach-smdk2440.c的smdk2440_devices结构体数组添加rtc平台设备列表&s3c_device_rtc,2 配置内核Device Drivers -* Real Time Clock -* Set system time from RTC on startup and resume (NEW)(rtc0) RTC used to set the system time* /sys/class/rtc/rtcN (sysfs) (NEW)* /proc/driver/rtc (procfs for rtc0) (NEW)* /dev/rtcN (character devices) (NEW) Samsung S3C series SoC RTC3 重新编译内核并下载到开发板roottq2440 /# dateThu Jan 1 00:09:48 UTC 1970roottq2440 /# date -s 2012.10.17-22:30:0设置时间Wed Oct 17 22:30:00 UTC 2012roottq2440 /# hwclock -w设置硬件时间为当前系统时间这样系统重启后会自动更新到硬件时间5、 LCD驱动移植1 在arch/arm/mach-s3c2440/mach-smdk2440.c中修改LCD参数.width= 480,.height= 272,.pixclock= (2 * 1000000000000LL)/(60 * (2 + 2 + 41 + 480) * (2 + 2 + 10 + 272),.xres= 480,.yres= 272,.bpp= 16,.left_margin= 2,.right_margin= 2,.hsync_len= 41,.upper_margin= 2,.lower_margin= 2,.vsync_len= 10,将下面这行注释掉/.lpcsel= (0xCE6) & 7) | 1Graphics support - Support for frame buffer devices - S3C2410 LCD framebuffer support* Bootup logo - Standard black and white Linux logo Standard 16-color Linux logo* Standard 224-color Linux logo (NEW)4 重新编译内核将看到LCD显示开机logo5 解决10分钟后黑屏:修改drivers/char/vt.c可修改static int blankinterval = 10*60;默认为10分钟后LCD背光就自动关闭,当发生中断就会开启,改为0,LCD就常亮。6 关闭光标:修改/drivers/video/console/softcursor.cint soft_cursor(struct fb_info *info, struct fb_cursor *cursor)#if 0struct fbcon_ops *ops = info-fbcon_par;unsigned int scan_align = info-pixmap.scan_align - 1;unsigned int buf_align = info-pixmap.buf_align - 1;unsigned int i, size, dsize, s_pitch, d_pitch;struct fb_image *image;u8 *src, *dst;if (info-state != FBINFO_STATE_RUNNING)return 0;s_pitch = (cursor-image.width + 7) 3;dsize = s_pitch * cursor-image.height;if (dsize + sizeof(struct fb_image) != ops-cursor_size) if (ops-cursor_src != NULL)kfree(ops-cursor_src);ops-cursor_size = dsize + sizeof(struct fb_image);ops-cursor_src = kmalloc(ops-cursor_size, GFP_ATOMIC);if (!ops-cursor_src) ops-cursor_size = 0;return -ENOMEM;src = ops-cursor_src + sizeof(struct fb_image);image = (struct fb_image *)ops-cursor_src;*image = cursor-image;d_pitch = (s_pitch + scan_align) & scan_align;size = d_pitch * image-height + buf_align;size &= buf_align;dst = fb_get_buffer_offset(info, &info-pixmap, size);if (cursor-enable) switch (cursor-rop) case ROP_XOR:for (i = 0; i datai cursor-maski;break;case ROP_COPY:default:for (i = 0; i datai & cursor-maski;break; elsememcpy(src, image-data, dsize);fb_pad_aligned_buffer(dst, d_pitch, src, s_pitch, image-height);image-data = dst;info-fbops-fb_imageblit(info, image);#endifreturn 0;6、 触摸屏驱动移植1 在BSP文件加入头文件#include 2 加入触摸屏数据static struct s3c2410_ts_mach_info hard_s3c2410ts_info = .delay = 0xffff,.oversampling_shift = 2,.cfg_gpio = s3c24xx_ts_cfg_gpio,;3 添加触摸屏和ADC平台设备列表,ADC一定要在TS前面&s3c_device_adc,&s3c_device_ts,4 加入如下函数,这个函数将上面加入的结构体设为触摸屏设备的s3c_device_ts.dev.platform_datastatic void _init smdk2440_machine_init(void)s3c24xx_fb_set_platdata(&smdk2440_fb_info);s3c_i2c0_set_platdata(NULL);s3c24xx_mci_set_platdata(&sd_cfg);s3c24xx_ts_set_platdata(&hard_s3c2410ts_info);platform_add_devices(smdk2440_devices, ARRAY_SIZE(smdk2440_devices);smdk_machine_init();5 修改arch/arm/plat-s3c24xx/Kconfig config S3C2410_SETUP_TS bool Touchscreen setup6 配置内核System Type -* Touchscreen setup Device Drivers -Input device support -* Touchscreens - Samsung S3C2410/generic touchscreen input driver7 重新编译内核启动时输出samsung-ts s3c2440-ts: driver attached, registering input deviceinput: S3C24XX TouchScreen as /class/input/input18 编写用户空间测试程序#include #include #include #include #include #include #include #include #include int fd;struct input_event event;void input_handle(int signum)if (read(fd, &event, sizeof(struct input_event)* Watchdog Timer Support - S3C2410 Watchdog4 重新编译内核并下载到开发板,串口输出:s3c2410_wdt: S3C2410 Watchdog Timer, (c) 2004 Simtec Electronicss3c2410-wdt s3c2410-wdt: starting watchdog timers3c2410-wdt s3c2410-wdt: watchdog active, reset enabled, irq disabled此时由于没有喂狗,系统启动后过会会自动重启5 编写喂狗程序feed_wdt.c#include #include #include #include #include int main()int fd;if (fd = open(/dev/watchdog, O_RDONLY)/proc/sys/kernel/hotplugmdev -sfeed_wdt &ifconfig lo ifconfig eth0 00 netmask route add default gw 8、 按键输入子系统移植1 arch/arm/mach-s3c2440/mach-smdk2440.c加入按键相关platform代码#include #include static struct gpio_keys_button tq2440_buttons = .gpio= S3C2410_GPF(1),.code= KEY_UP,.desc= Up,.active_low= 1,.wakeup= 0,.gpio= S3C2410_GPF(4),.code= KEY_DOWN,.desc= Down,.active_low= 1,.wakeup= 0,.gpio= S3C2410_GPF(2),.code= KEY_LEFT,.desc= Left,.active_low= 1,.wakeup= 0,.gpio= S3C2410_GPF(0),.code= KEY_RIGHT,.desc= Right,.active_low= 1,.wakeup= 0,;static struct gpio_keys_platform_data tq2440_button_data = .buttons = tq2440_buttons,.nbuttons = ARRAY_SIZE(tq2440_buttons),;static struct platform_device tq2440_device_button = .name= gpio-keys,.id= -1,.dev= .platform_data =&tq2440_button_data,;在smdk2440_devices中加入platform设备&tq2440_device_button,2 配置内核Device Drivers -Input device support -* Keyboards - GPIO Buttons3 重新编译内核4 编写用户空间测试程序gpio_button.c#include #include #include #include #include int main(int argc, char *argv)int fd = -1;int num;size_t rb;int version;char name20;struct input_event ev;if (fd = open(/dev/event0, O_RDONLY) 0)perror(open error);exit(1);if (ioctl(fd, EVIOCGNAME(sizeof(name)-1), name) 0)perror(getname error);exit(1);/printf(name=%sn, name);if (ioctl(fd, EVIOCGVERSION, &version) 0)perror(getversion error);exit(1);/printf(version=0x%xn, version);while(1)rb = read(fd, &ev, sizeof(struct input_event);if (rb (int)sizeof(struct input_event)perror(read error);exit(1);/printf(read %d eventn, (int)(rb/sizeof(struct input_event);if (EV_KEY=ev.type)if (1 = ev.value)printf(key %d is pressedn, ev.code);elseprintf(key %d is releassedn, ev.code);close(fd);return 0; 9、 SD驱动移植1 arch/arm/mach-s3c2440/mach-smdk2440.c中添加头文件#include #include 2 arch/arm/mach-s3c2440/mach-smdk2440.c中填充如下结构static struct s3c24xx_mci_pdata sd_cfg = .no_wprotect = true,.gpio_detect = S3C2410_GPG(8),.set_power = NULL,.ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34,;3 添加如下函数:这个函数将上面添加结构体sd_cfg 设为SD 卡平台设备结构s3c_device_sdi的platform_data。static void _init smdk2440_machine_init(void)s3c24xx_fb_set_platdata(&smdk2440_fb_info);s3c_i2c0_set_platdata(NULL);s3c24xx_mci_set_platdata(&sd_cfg);platform_add_devices(smdk2440_devices, ARRAY_SIZE(smdk2440_devices);smdk_machine_init();4 arch/arm/mach-s3c2440/mach-smdk2440.c plat_device 结构体中加入&s3c_device_sdi,5 配置内核支持SD卡Device Drivers - MMC/SD/SDIO card support - MMC block device driver* Use bounce buffer for simple hosts Samsung S3C SD/MMC Card Interface support6 重新编译内核插入SD卡roottq2440 /# s3c-sdi s3c2440-sdi: running at 0kHz (requested: 0kHz).s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).s3c-sdi s3c2440-sdi: running at 25000kHz (requested: 25000kHz).s3c-sdi s3c2440-sdi: running at 25000kHz (requested: 25000kHz).mmc0: new SDHC card at address e624mmcblk0: mmc0:e624 SU04G 3.69 GiB mmcblk0: p1roottq2440 /# mount /dev/mmcblk0p1 /mnt/ 手动挂载SD卡roottq2440 /# ls /mnt/列出SD内容z.txtroottq2440 /# umount /mnt/卸载SD卡7 实现自动挂载SD卡在根文件系统根目录下创建用于挂载SD卡的目录rootzjh:/home/rootfs# mkdir sddisk在etc/下创建配置文件mdev.confrootzjh:/home/work/rootfs# vi etc/mdev.conf内容如下mmcblk0-9*p0-90:00660(mount -t vfat /dev/$MDEV /sddisk)mmcblk0-9*p0-90:00660$(umount /sddisk)更多mdev.conf的设置可参考busybox的docs/m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- ISO 12614-22021 道路车辆 - 液化天然气(Lng)燃油系统组件 - 第2部分性能和一般测试方法标准立项发展报告
- 试题跟答案展示
- 供暖物资采购相关试题与答案解析
- 草原管理模拟测评试题与答案
- 2026年低压电工操作证理论全国考试题库(含答案)
- 河南金太阳2026届3月联考3.26数学试题
- 高中物理必修第一册课时分层作业(十三)
- 2026年幼儿语言教育培训
- 海事两员考试题库及答案2026
- 安全警示标志管理保证措施
- 2025年国网南瑞集团有限公司(国网电力科学研究院有限公司)高校毕业生招聘100人(第二批)笔试题库历年考点版附带答案详解版
- 食品检验实验室质量管理体系构建
- 猪场粪污消纳协议书
- 高效空气源热泵采暖系统设计
- 温室气体培训课件
- 房屋买卖委托协议书
- GB/T 44949-2024智能热冲压成形生产线
- 老年大学教育服务流程
- (正式版)JB∕T 11108-2024 建筑施工机械与设备 筒式柴油打桩锤
- 滨州山东滨州市新闻传媒中心招聘事业单位人员控制总量备案管理工作人员65人笔试历年典型考题及考点附答案解析
- 霉菌毒素与脱毒素产品
评论
0/150
提交评论