分类 - 嵌入式

kernel    2017-02-21 14:01:42    79    0    0

现在还不是很确定 这个版本内核能不能不设置MTD相关函数直接启动 。。。。。

貌似不行

书上说的内容在这个版本内核里面完全变样了 我勒个去~

代码量太大 找不到头绪在那儿

函数调来调去......看得晕乎了~~~~~

static int s3c2410_nand_add_partition(struct s3c2410_nand_info *info,
				      struct s3c2410_nand_mtd *mtd,
				      struct s3c2410_nand_set *set)
{
	if (set) {
		mtd->mtd.name = set->name;

		return mtd_device_parse_register(&mtd->mtd, NULL, NULL,
					 set->partitions, set->nr_partitions);
	}

	return -ENODEV;
}

下面函数调用了上面的

static int s3c24xx_nand_probe(struct platform_device *pdev)
{
	struct s3c2410_platform_nand *plat = to_nand_plat(pdev);
	enum s3c_cpu_type cpu_type;
	struct s3c2410_nand_info *info;
	struct s3c2410_nand_mtd *nmtd;
	struct s3c2410_nand_set *sets;
	struct resource *res;
	int err = 0;
	int size;
	int nr_sets;
	int setno;

	cpu_type = platform_get_device_id(pdev)->driver_data;

	info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
	if (info == NULL) {
		err = -ENOMEM;
		goto exit_error;
	}

	platform_set_drvdata(pdev, info);

	spin_lock_init(&info->controller
kernel    2017-02-20 10:12:08    95    0    0

韦东山的书里面讲的是2.6版本内核

现在这个4.4的版本里面增加了不少的功能

对比着书里面说的也能配置出来

在顶层Makefile文件添加如下内容

#配置arm体系交叉环境参数
ARCH		?= arm
CROSS_COMPILE	?= arm-linux-

查找配置文件:

/var/s3c2440-src/linux-4.4.1
一 2月 20|11:02|0:>find . -name s3c2410*
./arch/arm/configs/s3c2410_defconfig
./arch/arm/mach-s3c24xx/s3c2410.c
./drivers/cpufreq/s3c2410-cpufreq.c
./drivers/input/touchscreen/s3c2410_ts.c
./drivers/mtd/nand/s3c2410.c

生成内核配置文件:

/var/s3c2440-src/linux-4.4.1
一 2月 20|11:03|0:>make s3c2410_defconfig
#
# configuration written to .config
#​

配置内核信息

一 2月 20|11:03|0:>make menuconfig
scripts/kconfig/mconf Kconfig

*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.​

进去之后找到开发板的相关配置文件

这里很多选项基本就是单选 按空格选中就行 不清楚的用问号 会出来相关信息

话说 这他娘的 英语不行 真坑啊。。。。。。。。。

 

这只是很基本的配置 更多的配置选项还得一个一个的找 。。。。。。。。。。

 

部分配置选项说明:http://how-to.wikia.com

 

=================================================================================================================

修改启动时钟频率

 

		/var/s3c2440-src/linux-4.4.1
		一 2月 20|11:36|0:>find . -name mach-smdk24
u-boot    2017-02-19 11:00:32    83    0    0

交叉编译工具:

友善之臂的 arm-linux-gcc-4.5.1

在顶层Makefile文件里面添加

ARCH=arm
CROSS_COMPILE ?= arm-linux-
cd u-boot-2015.10/
 vim Makefile
 make smdk2410_config
 make

这里测试通过 不过编译出来的文件是不能用的

 

==============================================

昨天搞了一天不知道为嘛添加单板后报错

然后各种的找原因~~~~~~~

 

>make smdk2440_config
	make[1]: *** No rule to make target 'board/samsung/smdk2440/smdk2440.o', needed by 'board/samsung/smdk2440/built-in.o'。 停止。
	Makefile:1196: recipe for target 'board/samsung/smdk2440' failed
	make: *** [board/samsung/smdk2440] Error 2

 

报出这种错误一般就是文件名字还有路径什么的不匹配

找出board/samsung/smdk2440/相关的文件依赖还有头文件定义


最初我还以为是Makefiel写的脚本原因 各种的找 找 找

找了一天 看了一些关于u-boot的Makefile编译流程和分析 

最后结果就集中到了脚本生成的相关文件上

在脚本目录里面找来找去也看不出毛病在那儿~

===========================================这里是部分寻找过程

>grep "built-in.o" -nR > built-in.txt

		board/samsung/smdk2410/.built-in.o.cmd:1:cmd_board/samsung/smdk2410/built-in.o :=  arm-linux-ld     -r -o 
		board/samsung/smdk2440/.built-in.o.cmd:1:cmd_board/samsung/smdk2410/built-in.o :=  arm-linux-ld     -r -o 

这里很明显 在两个不同的目录下脚本自动生成

无    2017-02-03 20:04:57    201    0    0
~/YOCTO/poky-morty-16.0.0/build> bitbake core-image-sato
Loading cache: 100% |######################################################################################| Time: 0:00:00
Loaded 1370 entries from dependency cache.
ERROR: No recipes available for:
  /home/xuan/YOCTO/poky-morty-16.0.0/meta-fsl-arm-2.1/recipes-kernel/linux/linux-yocto_3.8.bbappend

Summary: There was 1 ERROR message shown, returning a non-zero exit code.

是不是官方就没有这个内核的版本存在了???

build目录里面locla.conf 和 bblayers.conf配置文件都改了。。。。。

看来得看看脚本文件怎么运行找内核了 。。。。。。

=================================================

现在问题集中在了/meta-fsl-arm-2.1/recipes-kernel/linux/下面linux-yocto_3.8.bbappend这个东西的两个MD5?还是神码?

SRCREV_machine_pn-linux-yocto_fishriver ?= "697d84759be192403a8a87ab269196c67a0c2c88"
SRCREV_meta_pn-linux-yocto_fishriver ?= "f1dc3722d45cdcc92c84ebfecf4ce616d2efed26"

 构建提示找不到这个内核文件 ~~~~~

wiki:https://wiki.yoctoproject.org/wiki/BKM:_starting_a_new_BSP

构建内核示例文档:https://www.yoctoproject.org/sites/default/files/devday-kernel-tzanussi-elc-201

无    2017-01-30 10:52:19    286    0    0

装完了发现是收费的 。。。。。。郁闷了



openSUSE    2017-01-19 10:08:16    319    0    0

基于openSUSE版本的YOCTO
文档主页:Yocto Project Mega-Manual

1.安装相关依赖

 sudo zypper install python gcc gcc-c++ git chrpath make wget python-xml \
 diffstat makeinfo python-curses patch socat libSDL-devel xterm​

2.获取软件 第二部貌似不用做 我没做

git clone -b morty git://git.yoctoproject.org/poky.git
git checkout morty​

或者从 https://www.yoctoproject.org/downloads 下载需要的版本

3.YOCTO开发手册(软件适用方法)相关链接

    1.初始设置:http://www.yoctoproject.org/docs/2.2/mega-manual/mega-manual.html#local-yp-release

    2.Yocto Project 2.2 - Morty: https://www.yoctoproject.org/documentation

    3.Morty说明文档http://www.yoctoproject.org/docs/2.2/mega-manual/mega-manual.html

    4.常见问题解答:http://www.yoctoproject.org/docs/2.2/mega-manual/mega-manual.html#how-does-the-yocto-project-obtain-source-code-and-will-it-work-behind-my-firewall-or-proxy-server

4.1构建

    1.构建主机设置 自己配置为arm的啦

    2.取出版本

     $ cd〜/poky
     $ git checkout -b morty origin /morty //这里报错啦没搭理继续​

    3.初始化构建环境:

$ source oe-init-build-env 执行这步骤自动进入build目录

      到这里碰到问题如下提示

~/poky> source oe-init-buil
刷机    2017-01-16 12:18:30    134    0    0

先看看手机里面的内部信息

删除所有分区之后链接电脑win系统是9008的串口驱动提示 这种只能重新刷emmc了 

# gdisk /dev/sdc
 
Disk /dev/sdc: 30785536 sectors, 14.7 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 98101B32-BBE2-4BF2-A06E-2BB33D000C20
Partition table holds up to 32 entries
First usable sector is 34, last usable sector is 30785502
Partitions will be aligned on 2-sector boundaries
Total free space is 86924 sectors (42.4 MiB)
 
Number  Start (sector)    End (sector)  Size       Code  Name
   1              34            1057   512.0 KiB   FFFF  sbl1
   2            1058            2081   512.0 KiB   0700  sbl1bak
   3            2082            4129   1024.0 KiB  FFFF  aboot
   4            4130            6177   1024.0 KiB  0700  abootbak
   5            6178            7201   512.0 KiB   FFFF  rpm
   6            7202            8225   512.0 KiB   0700  rpmbak
   7            8226            9249   512.0 KiB   FFFF  tz
   8            9250           10273   512.0 KiB   0700  tzbak
   9           10274           1
刷机    2016-12-20 20:07:43    15    0    0

Linux下解包/打包Android映像文件 system.img, boot.img, ramdisk.img, userdata.img.
http://blog.csdn.net/yulix/article/details/12968705

Android源码编译成功后会输出映像文件:system.img,boot.img, ramdisk.img,userdata.img等等。有时我们需要修改里面的内容,下面列出在Linux下如何解包/打包这些映像文件。
---------------------------------------------------------
ramdisk.img
ramdisk.img是经cpio打包、并用gzip压缩的文件。

解包: 新建一个工作目录,把当前目录更改为该工作目录,执行下面命令(注意: img文件位置可能不同).
gunzip -c $HOME/img/ramdisk.img | cpio -i

打包:在工作目录下,把该目录下的所有内容打包
find . | cpio -o -H newc | gzip > ../newramdisk.img
参考文档: http://android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images

-------------------------------------
boot.img
boot.img包含2K字节头部,后面跟着的是zImage格式内核和和ramdisk格式的根文件系统。

解包工具: Android自带的unpackbootimg,以及一些脚本工具比如split_bootimg.pl

打包工具: Android自带的mkbootimg。

参考资料 :

中文请看: http://blog.csdn.net/wh_19910525/article/details/8200372

英文请看: http://android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images

-------------------------------------------

system.img

刷机    2016-12-20 20:06:01    83    0    0

同一个官方的boot.img解包完之后没有任何改动 接着打包 出来的状态就不一样了 醉了~~~~~~~~`

解包boot.img-ramdisk.gz
解包前文件内容:
xuan@SUSE:~/tftp/new-cm810/bootimgROM/new/boot> file boot.img-ramdisk.gz 
boot.img-ramdisk.gz: gzip compressed data, from Unix
xuan@SUSE:~/tftp/new-cm810/bootimgROM/new/boot> stat boot.img-ramdisk.gz 
 文件:"boot.img-ramdisk.gz"
 大小:785375 块:1536 IO 块:4096 普通文件
设备:815h/2069d Inode:420670816 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 1000/ xuan) Gid:( 100/ users)
最近访问:2016-12-20 18:58:37.335426558 +0800
最近更改:2016-12-20 18:33:02.349119800 +0800
最近改动:2016-12-20 18:57:58.859170655 +0800
创建时间:-
------
解包:
xuan@SUSE:~/tftp/new-cm810/bootimgROM/new/boot> mkdir ramdisk
xuan@SUSE:~/tftp/new-cm810/bootimgROM/new/boot> cd ramdisk
xuan@SUSE:~/tftp/new-cm810/bootimgROM/new/boot/ramdisk> gzip -dc ../boot.img-ramdisk.gz | cpio -i
打包:
find . | cpio -o -H newc | gzip > ../boot.img-ramdisk-new.gz
打包后文件状态
xuan@SUSE:~/tftp/new-cm810/bootimgROM/new/boot> file boot.img-ramdisk-new.gz 
boot.img-ramdisk-new.gz: gzip compressed data, last 
刷机    2016-12-19 18:58:21    213    0    0

在网上看了一下制作boot.img的教程 自己制作了一个 线刷之后变砖了

无法进入fastboot模式 链接电脑发现30个分区 我去~

sdc的分区都是手机的 因为我电脑是双硬盘的 所以手机的硬盘被识别为sdc

下面是lsblk命令的记录 

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 111.8G 0 disk 
├─sda1 8:1 0 16M 0 part 
├─sda2 8:2 0 84M 0 part /boot/efi
├─sda3 8:3 0 2G 0 part [SWAP]
├─sda4 8:4 0 49.7G 0 part /
├─sda5 8:5 0 59.2G 0 part 
└─sda6 8:6 0 798M 0 part 
sdb 8:16 0 931.5G 0 disk 
├─sdb1 8:17 0 195M 0 part 
├─sdb2 8:18 0 100G 0 part 
├─sdb3 8:19 0 50G 0 part /var
├─sdb4 8:20 0 50G 0 part /opt
├─sdb5 8:21 0 200G 0 part /home
├─sdb6 8:22 0 200G 0 part 
└─sdb7 8:23 0 331.3G 0 part 
sdc 8:32 0 14.7G 0 disk 
├─sdc1 8:33 0 512K 0 part 
├─sdc2 8:34 0 512K 0 part 
├─sdc3 8:35 0 1M 0 part 
├─sdc4 8:36 0 1M 0 part 
├─sdc5 8:37 0 512K 0 part 
├─sdc6 8:38 0 512K 0 part 
├─sdc7 8:39 0 512K 0 part 
├─sdc8 8:40 0 512K 0 part 
├─sdc9 8:41 0 512K 0 part 
├─sdc10 8:42 0 512K 0 part 
├─sdc11 8:43 0 1M 0 part 
├─sdc12 8:44 0 1.5M 0 part 
├─sdc13 8:45 0 1.5M 0 part 
├─sdc14 8:46 0 1M 0 part 
├─sdc15 8:47 0 1K 0 
2/4