标签 - kernel

kernel openSUSE android    2017-11-16 01:03:38    11    0    0

F-04G开源软件网页链接地址:http://spf.fmworld.net/oss/oss/f-04g/first/index.html

软件名称: F04G_V14R36F.tar.gz / 563,180,406字节

软件下载页面:http://spf.fmworld.net/oss/oss/f-04g/first/data/download.html

软件下载链接:http://spf.fmworld.net/oss/oss/f-04g/first/data/dammy/F-04G_V14R36F.tar.gz http://download-spf.fmworld.net/oss/oss/f-04g/first/data/F-04G_V14R36F.tar.gz

上面的源代码是不完整的 在编译过程中发现的问题主要是 文件缺失 头文件定义 不能够make clean 

做了个补丁文件 传到了某度盘里面 链接: https://pan.baidu.com/s/1mhI2n4c 密码: ty5u

最后需要修改的地方是

/kernel/include/linux/msm_ion_ex.h
/* FUJITSU:2015-01-06 SEC Mod <S> */
/*#define FIDO_SEC */ 注释掉这一行 要不然编译报错
/* FUJITSU:2015-01-06 SEC Mod <E> */

adb驱动 官网下载地址 http://spf.fmworld.net/oss/driver/adb/data/download.html

使用的编译器版本 make版本以及目标文件配置选项

ARCH=arm64
CROSS_COMPILE=aarch64-linux-android-
export PATH=/opt/aarch64-linux-android-4.8/bin/:$PATH
GNU Make 3.82
Built for x86_64-unknown-linux-gnu
make msm8994_defconfig​

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

上面默认生成的目标没有Image.gz-dtb
修改/kernel/arch/arm64/boot/Makefile之 19行:

targets := Image Image.gz​


为:

kernel    2017-03-02 19:47:46    85    0    0

 

这里进去的u-boot还是我移植的那个版本呢

执行以下命令:擦出坏块

nand bad​


擦出内核坏块

SMDK2440 # nand scrub.part kernel 
NAND scrub.part: device 0 offset 0x60000, size 0x600000
Warning: scrub option will erase all factory set bad blocks!
 There is no reliable way to recover them.
 Use this command only for testing purposes if you
 are sure of what you are doing!
Really scrub this NAND flash? <y/N>
y
Erasing at 0x640000 -- 100% complete.
OK​

 

SMDK2440 # nand erase.part kernel
NAND erase.part: device 0 offset 0x60000, size 0x600000
Skipping bad block at 0x00100000 
Skipping bad block at 0x00120000 
Skipping bad block at 0x00200000 
Skipping bad block at 0x00220000 
Skipping bad block at 0x00300000 
Skipping bad block at 0x00320000 
Skipping bad block at 0x00400000 
Skipping bad block at 0x00420000 
Skipping bad block at 0x00500000 
Skipping bad block at 0x00520000 
Skipping bad block at 0x00600000 
Skipping bad block at 0x00620000 
Erasing at 0x640000 -- 100% complete.
OK​

擦除root分区坏块​

SMDK2440 # nand scrub.part root
NAND s
u-boot kernel    2017-03-02 10:12:13    121    0    0

造成这个错误的原因有多少我不知道

google了一下

说内核设置小了 所以u-boot读取内核不完整导致失败了

还有说是nand bad (nand坏快引起的)

还有的是启动引导参数设置不正确导致的

还有的是 机器ID不一致导致的(u-boot机器ID和linux 内核默认的机器ID不一直)

尼马我都试了还是不行 

然后回头又看了看启动的信息

基本上是坏快的原因了 因为坏快产生在了内核引导的地址 而内核貌似不检查这些 

所以。。。。。悲剧了~

这是我移植之后内核设置6M的一大原因吧!具体是不是这个原因得回去试试~

参考:

http://processors.wiki.ti.com/index.php/Writing_Kernel_Image_to_NAND_Flash

http://www.denx.de/wiki/DULG/UBootCmdGroupNand

http://www.voidcn.com/blog/fu851523125/article/p-6182227.html

http://www.100ask.org/bbs/forum.php?mod=viewthread&tid=753&highlight=%BB%B5%BF%E9

bdinfo信息

SMDK2440 # bdinfo
arch_number = 0x000000C1
boot_params = 0x30000100
DRAM bank   = 0x00000000
-> start    = 0x30000000
-> size     = 0x04000000
eth0name    = dm9000
ethaddr     = 00:50:56:C0:00:08
current eth = dm9000
ip_addr     = 192.168.0.110
baudrate    = 115200 bps
TLB addr    = 0x33FF0000
relocaddr   = 0x33F29000
reloc off   = 0x00529000
irq_sp      = 0x33B28EF0
sp start    = 0x33B28EE0

重新设置机器ID:​

SMDK2440 # set mancid 16a
SMDK2440 # save 
SMDK2440 # reset​
。。。。。。。。。
*
kernel    2017-02-28 15:50:51    224    0    0

我的机器配置:

>uname -a
Linux SUSE.suse 4.1.38-50-default #1 SMP PREEMPT Sun Feb 19 14:35:48 UTC 2017 (6b4d8cb) x86_64 x86_64 x86_64 GNU/Linux
/var/smdk2440/linux-4.4.1

给2440移植一个4.1的内核吧

>xz -cd linux-4.X.tar.xz | tar xvf -
>cd linux-4.1.36
>xz -cd ../patch-4.1.36.xz | patch -p1
patching file .mailmap
Reversed (or previously applied) patch detected!  Assume -R? [n]

这意思是已经打过补丁了?

>make s3c2410_defconig
scripts/kconfig/conf  --silentoldconfig Kconfig
***
*** Configuration file ".config" not found!
***
*** Please run some configurator (e.g. "make oldconfig" or
*** "make menuconfig" or "make xconfig").
***
scripts/kconfig/Makefile:37: recipe for target 'silentoldconfig' failed
make[2]: *** [silentoldconfig] Error 1
Makefile:543: recipe for target 'silentoldconfig' failed
make[1]: *** [silentoldconfig] Error 2
make: *** No rule to make target 's3c2410_defconig'。 停止。

这个错误没有看出哪里毛病来

然后直接进行

> make menuconfig

看了一下大概信息

然后修改/arch/arm/mach-s3c24xx/mach-smdk2440.c 

晶震改为:12000000

/arch/arm/mach-s3c24xx/common-smdk.c 

N

kernel    2017-02-21 14:01:42    83    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    100    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