i.MX 6 DL学習記録---kernel移植

15894 ワード

ソフトウェアバージョン:uboot-2013-04+kernel-3.10.35
ハードウェアバージョン:i.MX 6 DL-Sabreasd
準備作業
移植kernelとubootの差は多くありません.ここでダウンロードしたのはfreescale公式サイトがメンテナンスしているkernelバージョンなので、仕事量はそれほど大きくありません.対応するconfigファイルを見つけて、自分のハードウェアを参照して対応するソースコードを修正すればいいです.arch/arm/configsでここに必要なプロファイルを見つけることができます.imx 6 dlはARMv 7フレームワークのチップなので、ここのプロファイルはimx_です.v7_config.従来接触していたkernelはいずれも従来のATAGS方式を用いてカーネルパラメータを伝達していたが,今回使用したkernel-3.10.35は新しい概念DeviceTreeを導入し,kernel 3から導入したという.xはその後実行され、興味のある人は理解することができます.
新しいDTB方式を実行するカーネルパラメータを伝達した後にソースコードを駆動する構造がより明確になり、デバイス登録という重複するコードを省く、従来のデバイス登録に代わってarch/arm/boot/dtsディレクトリの下に変更された.dtsファイルです.このディレクトリの下に対応するプレートを見つけます.dtsファイルimx 6 dl-sabresd.dtsは、このファイルにi 2 cデバイスの登録を実現するが、一連を含む.dtsiファイルはinclude「xxx.h」のように
/dts-v1/;

#include "imx6dl.dtsi"
#include "imx6qdl-sabresd.dtsi"
#include "imx6dl-sabresd-common.dtsi"

/ {
    model = "Freescale i.MX6 DualLite SABRE Smart Device Board(PFUZE100)";
    compatible = "fsl,imx6dl-sabresd", "fsl,imx6dl";
};
デバイス登録ファイルimx 6 qdl-sabresdを変更する必要があります.dtsiとピン定義ファイルimx 6 qdl.dtsi、後で各デバイスが駆動する移植の追加はこの2つのファイルを大量に修正します
カーネル移植
freescaleがメンテナンスしているカーネルである以上、ここで使用しているboardも公式サイトのdemoボードと差が少ないので、何の修正もしなくても機械で走ることができます.ここでSD 3ピンを修正してSDカードストレージをサポートし、後でファイルシステムをマウントする準備をします.
1』CDピンの修正
--- a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
+++ b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
@@ -637,9 +637,9 @@
 
 &usdhc3 {
        pinctrl-names = "default";
-       pinctrl-0 = ;
-       cd-gpios = ;
-       wp-gpios = ;
+       pinctrl-0 = ;  /* SD3 4PIN , imx6qdl.dtsi */
+       cd-gpios = ;
+       bus-width = <4>;
        no-1-8-v;
        keep-power-in-suspend;
        enable-sdio-wakeup;

2』DTBの使用
公式のデフォルト方式は従来のATAGS方式を用いてカーネルパラメータを伝達するが,開発効率を向上させるために,本論文では新しいDTB方式を用いてカーネルパラメータを伝達した.このため、カーネルを構成し、従来のATAGS方式のカーネルパラメータ伝達のサポートをオフにする必要があります.
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1859,7 +1859,7 @@ config USE_OF
 
 config ATAGS
        bool "Support for the traditional ATAGS boot data passing" if USE_OF
-       default y
+       default n
        help
          This is the traditional way of passing data to the kernel at boot
          time. If you are solely relying on the flattened device tree (or
デフォルトのATAGS方式を失能
3』カーネルのコンパイル
#!/bin/bash
export ARCH=arm
export CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-fsl-linux-gnueabi-

#make distclean;

make imx_v7_defconfig                                                                                                                                                  
make imx6dl-sabresd.dtb

make uImage LOADADDR=0x12000000

4)ビデオカメラ
#!/bin/sh
sudo dd if=uImage of=/dev/sdx bs=512 seek=2048 conv=fsync                                                                                                              
sudo dd if=./dts/imx6dl-sabresd.dtb of=/dev/sdx bs=512 seek=20480 conv=fsync

起動コア
SDカードを開発ボードに差し込んだ後、開発ボードに電源を入れ、任意のキーを押してuboot起動を中断し、次のようにuboot環境変数を構成します.
setenv bootargs 'noinitrd console=ttymxc0,115200 root=/dev/mmcblk2p1 rw init=/linuxrc'
setenv bootcmd 'mmc dev 1; mmc read 0x11ffffc0 0x800 0x3000; mmc read 0x18000000 0x5000 0x800; bootm 0x11ffffc0 - 0x18000000'
saveenv
run bootcmd

起動logは次のとおりです.
U-Boot 2013.04-04989-g6bb0820-dirty (Jul 25 2016 - 10:31:08)

CPU:   Freescale i.MX6DL rev1.1 at 792 MHz
CPU:   Temperature 54 C, calibration data: 0x5aa50e69
Reset cause: POR
Board: MX6Q/SDL-SabreSD
I2C:   ready
DRAM:  1 GiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2
No panel detected: default to Hannstar-XGA
Display: Hannstar-XGA (1024x768)
In:    serial
Out:   serial
Err:   serial
mmc1 is current device
Net:   Phy not found
PHY reset timed out
FEC [PRIME]
Warning: failed to set MAC address

Normal Boot
Hit any key to stop autoboot:  0 
mmc1 is current device

MMC read: dev # 1, block # 2048, count 12288 ... 12288 blocks read: OK

MMC read: dev # 1, block # 20480, count 2048 ... 2048 blocks read: OK
## Booting kernel from Legacy Image at 11ffffc0 ...
   Image Name:   Linux-3.10.53-84330-g1409f05-dir
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    5590960 Bytes = 5.3 MiB
   Load Address: 12000000
   Entry Point:  12000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 18000000
   Booting using the fdt blob at 0x18000000
   XIP Kernel Image ... OK
OK
Read SW1AB error!
   Using Device Tree in place at 18000000, end 1800f378

Starting kernel ...

Booting Linux on physical CPU 0x0
Linux version 3.10.53-84330-g1409f05-dirty (robin@Grandtelco) #19 SMP PREEMPT Thu Jul 28 11:52:43 CST 2016
CPU: ARMv7 Processor [412fc09a] revision 10 (ARMv7), cr=10c53c7d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine: Freescale i.MX6 Quad/DualLite (Device Tree), model: Freescale i.MX6 DualLite SABRE Smart Device Board(PFUZE100)
cma: CMA: reserved 320 MiB at 3c000000
Memory policy: ECC disabled, Data cache writealloc
PERCPU: Embedded 8 pages/cpu @81593000 s8960 r8192 d15616 u32768
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 260096
Kernel command line: noinitrd console=ttymxc0,115200 root=/dev/mmcblk0p1 rw init=/linuxrc
PID hash table entries: 4096 (order: 2, 16384 bytes)
Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
Memory: 1024MB = 1024MB total
Memory: 697228k/697228k available, 351348k reserved, 0K highmem
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
    vmalloc : 0xc0800000 - 0xff000000   (1000 MB)
    lowmem  : 0x80000000 - 0xc0000000   (1024 MB)
    pkmap   : 0x7fe00000 - 0x80000000   (   2 MB)
    modules : 0x7f000000 - 0x7fe00000   (  14 MB)
      .text : 0x80008000 - 0x80c6e6b4   (12698 kB)
      .init : 0x80c6f000 - 0x80cb9300   ( 297 kB)
      .data : 0x80cba000 - 0x80d10fc0   ( 348 kB)
       .bss : 0x80d10fc0 - 0x80d7a0e4   ( 421 kB)
SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
Preemptible hierarchical RCU implementation.
        RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
NR_IRQS:16 nr_irqs:16 16
L310 cache controller enabled
l2x0: 16 ways, CACHE_ID 0x410000c8, AUX_CTRL 0x32050000, Cache size: 524288 B
sched_clock: 32 bits at 3000kHz, resolution 333ns, wraps every 1431655ms
CPU identified as i.MX6DL, silicon rev 1.1
Console: colour dummy device 80x30
Calibrating delay loop... 1581.05 BogoMIPS (lpj=7905280)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
Setting up static identity map for 0x806800e0 - 0x80680138
CPU1: Booted secondary processor
CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
Brought up 2 CPUs
SMP: Total of 2 processors activated (3162.11 BogoMIPS).
CPU: All CPU(s) started in SVC mode.
devtmpfs: initialized
pinctrl core: initialized pinctrl subsystem
regulator-dummy: no parameters
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
Use WDOG2 as reset source
syscon 20c8000.anatop: regmap [mem 0x020c8000-0x020c8fff] registered
vdd1p1: 800  1375 mV at 1100 mV 
vdd3p0: 2625  3400 mV at 3000 mV 
vdd2p5: 2000  2750 mV at 2400 mV 
cpu: 725  1450 mV at 1150 mV 
vddpu: 725  1450 mV 
vddsoc: 725  1450 mV at 1200 mV 
syscon 20e0000.iomuxc-gpr: regmap [mem 0x020e0000-0x020e0037] registered
syscon 21bc000.ocotp-ctrl: regmap [mem 0x021bc000-0x021bffff] registered
hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
hw-breakpoint: maximum watchpoint size is 4 bytes.
imx6dl-pinctrl 20e0000.iomuxc: initialized IMX pinctrl driver
bio: create slab  at 0
mxs-dma 110000.dma-apbh: initialized
usb_otg_vbus: 5000 mV 
usb_h1_vbus: 5000 mV 
wm8962-supply: no parameters
mipi_dsi_pwr_on: no parameters
sensor-supply: 3300 mV 
i2c-core: driver [max17135] using legacy suspend method
i2c-core: driver [max17135] using legacy resume method
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
i2c i2c-0: IMX I2C adapter registered
i2c i2c-1: IMX I2C adapter registered
i2c i2c-2: Max17135 PMIC not found!
i2c i2c-2: IMX I2C adapter registered
Linux video capture interface: v2.00
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti 
PTP clock support registered
imx-ipuv3 2400000.ipu: IPU DMFC NORMAL mode: 1(0~1), 5B(4,5), 5F(6,7)
mxc_mipi_csi2 21dc000.mipi_csi: i.MX MIPI CSI2 driver probed
mxc_mipi_csi2 21dc000.mipi_csi: i.MX MIPI CSI2 dphy version is 0x3130302a
MIPI CSI2 driver module loaded
Advanced Linux Sound Architecture Driver Initialized.
Bluetooth: Core ver 2.16
NET: Registered protocol family 31
Bluetooth: HCI device and connection manager initialized
Bluetooth: HCI socket layer initialized
Bluetooth: L2CAP socket layer initialized
Bluetooth: SCO socket layer initialized
cfg80211: Calling CRDA to update world regulatory domain
pureg-dummy: no parameters
Switching to clocksource mxc_timer1
NET: Registered protocol family 2
TCP established hash table entries: 8192 (order: 4, 65536 bytes)
TCP bind hash table entries: 8192 (order: 4, 65536 bytes)
TCP: Hash tables configured (established 8192 bind 8192)
TCP: reno registered
UDP hash table entries: 512 (order: 2, 16384 bytes)
UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available
Bus freq driver module loaded
futex hash table entries: 512 (order: 3, 32768 bytes)
VFS: Disk quotas dquot_6.5.2
Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
NFS: Registering the id_resolver key type
Key type id_resolver registered
Key type id_legacy registered
jffs2: version 2.2. (NAND) �© 2001-2006 Red Hat, Inc.
fuse init (API version 7.22)
msgmni has been set to 2001
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
imx-weim 21b8000.weim: WEIM driver registered.
mxc_mipi_dsi 21e0000.mipi: i.MX MIPI DSI driver probed
MIPI DSI driver module loaded
mxc_sdc_fb fb.31: registered mxc display driver ldb
imx-ipuv3 2400000.ipu: IPU DMFC DP HIGH RESOLUTION: 1(0,1), 5B(2~5), 5F(6,7)
Console: switching to colour frame buffer device 128x48
mxc_hdmi 20e0000.hdmi_video: Detected HDMI controller 0x13:0x1a:0xa0:0xc1
fbcvt: 1920x1080@60: CVT Name - 2.073M9
mxc_sdc_fb fb.32: registered mxc display driver hdmi
imx_epdc_fb 20f4000.epdc: Unable to get display PMIC regulator.err = 0xfffffdfb
imx-sdma 20ec000.sdma: no iram assigned, using external mem
imx-sdma 20ec000.sdma: loaded firmware 1.1
imx-sdma 20ec000.sdma: initialized
pfuze100-regulator 1-0008: unrecognized pfuze chip ID!
pfuze100-regulator: probe of 1-0008 failed with error -5
Serial: IMX driver
2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 58) is a IMX
console [ttymxc0] enabled
serial: Freescale lpuart driver
imx sema4 driver is registered.
[drm] Initialized drm 1.1.0 20060810
[drm] Initialized vivante 1.0.0 20120216 on minor 0
brd: module loaded
loop: module loaded
of_dma_request_slave_channel: dma-names property missing or empty
spi_imx 2008000.ecspi: cannot get the TX DMA channel!
spi_imx 2008000.ecspi: dma setup error,use pio instead
m25p80 spi32766.0: found mr25h256, expected m25p32
m25p80 spi32766.0: mr25h256 (32 Kbytes)
spi_imx 2008000.ecspi: probed
CAN device driver interface
fec 2188000.ethernet (unregistered net_device): Invalid MAC address: 00:00:00:00:00:00
fec 2188000.ethernet (unregistered net_device): Using random MAC address: 82:30:12:c7:0f:05
libphy: fec_enet_mii_bus: probed
fec 2188000.ethernet eth0: registered PHC device 0
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
usbcore: registered new interface driver usb-storage
ci_hdrc ci_hdrc.1: doesn't support gadget
ci_hdrc ci_hdrc.1: EHCI Host Controller
ci_hdrc ci_hdrc.1: new USB bus registered, assigned bus number 1
ci_hdrc ci_hdrc.1: USB 2.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
mousedev: PS/2 mouse device common for all mice
elan-touch 2-0010: elan - Read Hello Packet Failed
elan-touch: probe of 2-0010 failed with error -22
egalax_ts 1-0004: Failed to read firmware version
egalax_ts: probe of 1-0004 failed with error -5
egalax_ts 2-0004: Failed to read firmware version
egalax_ts: probe of 2-0004 failed with error -5
input: max11801_ts as /devices/soc0/soc.1/2100000.aips-bus/21a4000.i2c/i2c-1/1-0048/input/input0
i2c-core: driver [isl29023] using legacy suspend method
i2c-core: driver [isl29023] using legacy resume method
snvs_rtc 20cc034.snvs-rtc-lp: rtc core: registered 20cc034.snvs-rtc-lp as rtc0
i2c /dev entries driver
mxc_v4l2_output v4l2_out.37: V4L2 device registered as video16
mxc_v4l2_output v4l2_out.37: V4L2 device registered as video17
mxc_v4l2_output v4l2_out.37: V4L2 device registered as video18
max11801_ts 1-0048: FIFO_RD_AUX_MSB read fails
max11801_ts 1-0048: FIFO_RD_AUX_MSB read fails
max11801_ts 1-0048: FIFO_RD_AUX_MSB read fails
max11801_ts 1-0048: FIFO_RD_AUX_MSB read fails
max11801_ts 1-0048: FIFO_RD_AUX_MSB read fails
max11801_ts 1-0048: FIFO_RD_AUX_MSB read fails
max11801_ts 1-0048: FIFO_RD_AUX_MSB read fails
max11801_ts 1-0048: FIFO_RD_AUX_MSB read fails
max11801_ts 1-0048: FIFO_RD_AUX_MSB read fails
max11801_ts 1-0048: FIFO_RD_AUX_MSB read fails
max11801_ts 1-0048: FIFO_RD_AUX_MSB read fails
max11801_ts 1-0048: FIFO_RD_AUX_MSB read fails
mag3110 2-000e: check mag3110 chip ID
mag3110 2-000e: read chip ID 0xfffffffb is not equal to 0xc4!
mag3110: probe of 2-000e failed with error -22
i2c-core: driver [mag3110] using legacy suspend method
i2c-core: driver [mag3110] using legacy resume method
mma8451 0-001c: read chip ID 0x1 is not equal to 0x1a or 0x2a!
mma8451: probe of 0-001c failed with error -22
imx2-wdt 20c0000.wdog: IMX2+ Watchdog Timer enabled. timeout=60s (nowayout=0)
Bluetooth: HCI UART driver ver 2.2
Bluetooth: HCI H4 protocol initialized
Bluetooth: HCI BCSP protocol initialized
Bluetooth: HCIATH3K protocol initialized
usbcore: registered new interface driver bcm203x
usbcore: registered new interface driver btusb
Bluetooth: Generic Bluetooth SDIO driver ver 0.1
usbcore: registered new interface driver ath3k
cpuidle: using governor ladder
cpuidle: using governor menu
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
mmc1: no vqmmc regulator found
mmc1: no vmmc regulator found
mmc1: SDHCI controller on 2194000.usdhc [2194000.usdhc] using ADMA
mmc2: no vqmmc regulator found
mmc2: no vmmc regulator found
mmc2: SDHCI controller on 2198000.usdhc [2198000.usdhc] using ADMA
mmc3: no vqmmc regulator found
mmc3: no vmmc regulator found
mmc3: SDHCI controller on 219c000.usdhc [219c000.usdhc] using ADMA
galcore: clk_get vg clock failed, disable vg!
mmc2: host does not support reading read-only switch. assuming write-enable.
mmc2: new high speed SDHC card at address aaaa
mmcblk2: mmc2:aaaa SS08G 7.40 GiB 
Galcore version 5.0.11.25762
 mmcblk2: p1 p2

まとめ:初めてDeviceTreeに接触して、理解する必要があるのはまだ多くて、先にしばらく使用することをマスターして、現在ただdeviceを追加する必要があるならば、例えば:i 2 c設備、SDIO設備などを理解して、あります.dtsまたは対応する.dtsiファイルに対応するデバイス情報を追加し、デバイスドライバに対応するドライバは、デバイス名、GPIOなどのデバイス情報の識別部分を追加する必要がある