导航:首页 > 源码编译 > 三星手机内核编译

三星手机内核编译

发布时间:2023-03-20 10:16:13

❶ 三星手机怎么进入开发者模式

下面来介绍如何让手机进入开发者选项。

1、首先在三星手机中,打开设置。

❷ 三星编译出来的内核不能开机

根据您的描述,手机不能开机的因素有很多,电池、手机软件、硬件都会引起此种不开机故障。
建议您尝试以下操作:
1、更换一块相同型号的颂桥手机电池进行测试。
2、将SIM卡和SD卡同时取出,然后按开机键10秒以上,测试能否开机。
3、将电池取出,使用万能充对电池充电30分钟左右后,放入手机,森漏测试能否正常开机
4、若问题依然存在,也可能与您自行下载安装的第三方软件有关。请在重新开机时当看到“SAMSUNG”Logo图标时,长住按返回键直到屏幕左下角出现“安全模式”字样时再松手,进入设置里卸载一些自行下载的应用程序后(设置-应用程序-管理应用程序-打此樱烂开需要删除的程序-卸载),关机重新开机尝试。
5、若卸载应用程序后还是不能开机,可以按照以上方式操作进入“安全模式”后备份数据(例如:联系人、短信、照片等),恢复出厂设置(设定—重置—恢复出厂设置),建议恢复出厂设置时“格式化USB存储器”不钩选,以免手机USB存储器中的所有数据丢失。
6、如果不能进入安全模式无法开机,请携带好手机、购机发票、三包凭证送三星服务中心由专业人员为您的手机进行检测。
服务中心查询网址:

❸ 三星手机如何设置监听功能

在本文中,我们将为读者介绍如何通过破解三星手的固件,让其变身为NFC安全研究的利器。
破解三星NFC芯片固件
最近,我一直在研究如何将我的旧智能手机玩出点新花样;同时,我这个人也怕麻烦,所以,最好仅仅通过获取root权限就能达成目标。众所周知,智能手机包含了大量的硬件,由于它们出厂前已经被锁定,所以,通常只能用于“常规”用途——既然我们要玩点新花样,我们不妨对其进行“深入”修改,把手机变成一个高效的安全研究工具。
Wi-Fi监听模式
对于标准无线网卡来说,通过其监听模式,就可以嗅探Wi-Fi流量并破解WPA密钥。也就是说,通过改变无线网卡的运行模式,我们就能在更低的级别上接收所有流量,从而获取大量以前无法获取的信息。
在智能手机上,我们可以通过多种方式实现上述目的。许多高通骁龙CPU都直接支持这个功能,如果已经破解了手机的root权限,则可以使用以下命令将手机设置为监听模式。
echo 4 > /sys/mole/wlan/parameters/con_mode
对于高通芯片组来说,这个过程可能会稍微复杂一些,因为不仅需要给内核打补丁,还要对固件进行定制,值得高兴的事,网上有许多公开的资料可以帮助大家完成这些任务。
尽管许多基于Android的安全工具都对这一功能提供了直接的支持,但是,如果你有兴趣的话,也可以通过切换根目录的方式,亲自搭建利用这些功能的环境。
根目录切换
当我获取了手机的root权限的手机来说,都会将根目录切换到核心数据分区中。在基于Debian的操作系统中,可以通过“qemu-debootstrap”命令轻松地生成一个指定CPU架构和版本的Debian根文件系统。一般情况下,我们习惯于将所需的命令放到手机上的“/data/local/userinit.sh”文件中(一个通常在Android设备启动时运行的脚本),这样的话,就能在不影响Android内核操作系统的情况下,为这个切换过根目录的环境提供对手机硬件的访问权限,同时,还可以启动一个SSH服务器,以便直接进入这个环境。
mount -o remount,rw /data
mount --bind /proc /data/debian_arm64/proc
mount --bind /sys /data/debian_arm64/sys
mount --bind /dev /data/debian_arm64/dev
mount devpts /租芦盯data/debian_arm64/dev/pts -t devpts
chroot /data/debian_arm64/ /bin/bash --login -c /usr/sbin/sshd &
USB设备仿真
linux系统,特别是在嵌入式设备上的Linux系统,通常能够仿真一个USB设备。在安卓系统上,内核通常会针对用户非常有用的特定功能进行编译的;对于普通用户来说,这些功能包括MTP、PTP、tethering,对于更高级的用户来说,这些功能还包括ADB。这些通常是作为内核的一个静态功能来编译的,然后,根据设备的/sys/目录下的设备文件进行有限的修改即可。你可以通过下载手机内核的源代码(通常可以在网上找到),并改变配置来启用大量的模块,以实现各种各样的功能。
其中,我最喜欢的是Gadget Filesystem模块,这是一个允许操作系统的用户空间控制USB功能的模块。这样,只要配置正确,任何嵌入式Linux设备就可以像USB设备一样处理了。实际上,只要你能弊和够用自己喜欢的编程语言来访问文件,就能达成上述目的。对于我来说,我更喜欢使用C语言来做这些事,比如模拟设备,或者利用USB堆栈的漏洞等。
NFC功能
虽然这些功能都很有趣,也很容易实现,但我发现,在Android设备中NFC芯片的低级功能的研究方面,却鲜见相关的报道。虽然标准的Android设备能够充当读卡器,并具有一些有限的标签仿真功能,还能够哗盯作为一些高级数据的中继工具,但它的功能是非常有限的;这些功能在NFC攻击工具通常都可以找到。
对于Proxmarks、Chameleons以及其他入门工具来说,不仅能够通过NFC进行原始级别的通信,并且能够进行一些在手机(即便获得了root权限)上根本无法实现的攻击。原因在于,手机在通过NFC通信时,是通过与专门为此而构建的辅助芯片进行通信的。因此,我决定选择一部手机,看看能否通过修改其NFC芯片的固件,从而将一部标准智能手机变成NFC攻击工具。
三星S6——SM-G920F
我的第一个目标是三星S6,我打算拿它来做实验。我曾经研究过这个手机的功能,并修改过其内核,甚至用Debian替换过其Android操作系统,我觉得或许这次能够玩出一点新花样。
通过查阅手机的文件系统和相关资料,我发现它使用的是Samsung Semiconctor开发的芯片,这在网上的散件市场上非常少见,因为这款手机的美国版本使用的是完全不同的芯片组。不过,该手机的所有非美版本却都采用了这款芯片。
NFC控制器:S3FWRN5
经查,该芯片为S3FWRN5,这是一款2014年开发的芯片,在Galaxy S6和Note 4手机中都使用了该款芯片。经研究表明,它的一个关键功能就是安全更新固件,这意味着在手机的文件系统的某个地方,很可能存在一个固件二进制文件。
虽然我设法在网上购买了一颗芯片,然而,我决定要从手机上完成所有的逆向工作,所以最终没有在项目中用到它们。
基本通信
当你在Android设备上查看硬件通信时,你就会发现,这与在任何嵌入式Linux设备上查看通信的方式没啥区别:通过ADB,导航到“/dev/”文件夹,并查看可用的设备文件。通过查看三星手机的内核源码,我很快就搞清楚了该芯片是如何与手机进行通信的,并注意到它是使用I2C进行通信的,并且GPIO引脚用于设置电源模式。这些在文件系统中很容易通过“/dev/i2c-*”和“/dev/gpio*”文件进行访问。
然而,我发现该芯片的内核驱动程序将其抽象为一个单一的设备文件“/dev/sec-nfc”,并且,这个文件是利用IOCTL来设置电源和模式的,并且可以通过写入和读取操作来发送和接收数据。
NCI通信
对于标准的NFC芯片来说,它们是使用称为NCI的标准协议进行通信的。该协议由基本的命令头构成,用于提取和限制功能,以降低交互的复杂性。每个NCI命令由以下元素组成。
GID:包含功能组标识符的字节(核心、射频、厂商特有特性等)。
OID:包含特定操作标识符的字节。
长度:包含参数长度的字节。
有效载荷:与操作有关的数据,最多为0xFC字节。
该协议的功能非常强大,通过将复杂的通信下沉到了芯片本身,从而有效降低了NFC操作的复杂性。
非标准NCI功能
NCI在协议中加入了一些扩展元素,从而帮助制造商在标准要求之外扩展其功能,如针对芯片的配置信息,或为芯片增加隐藏功能。
其中最关键的是组ID 0xF。这个组是专门为厂商特定的命令而引入的,可以添加任何非标准功能。人们可以通过发送带有递增操作ID的命令和检查错误响应来暴力破解这些命令,即使它们没有被记录在文档中。在NCI中,这些函数是最有可能包含我们感兴趣的或含有安全漏洞的特性,因为它们没有文档化的标准。
下面就是一个很好的例子,三星的S3FWRN5会利用这些命令来设置通信频率值。
S3FWRN5的固件更新
据我所知,所有NFC芯片的固件更新都会使用自己的协议。虽然这些协议仍然使用与核心NCI通信相同的端点,就S3FWRN5来说,它使用的是I2C,但协议本身是不同的,并且经常需要进入到一个特殊的模式来执行这些操作。在S3FWRN5中,芯片是通过IOCTL进入引导加载器模式后,才能进行固件更新。
我发现,在手机的“/vendor/firmware/”分区中可以轻松找到固件更新文件,即“sec_s3fwrn5p_firmware.bin”文件。
我想跟踪一个完整的固件更新过程,并希望记录它是如何执行的。之所以这样做,是为了加快分析进程:虽然实现固件更新的源代码是在线的, 但是我觉得通过分析实际的通信过程,可以快速直观地掌握更新的具体步骤。为此,我修改了手机上的“.rc”配置文件,特别是与NFC芯片相关的文件。并且,我发现了一个文件,其中不仅包含了固件目录,而且还包含了提高数据跟踪级别的配置,甚至包括手机是否总是在启动时执行固件更新方面的信息。我对该文件进行了修改,以满足我的相应需求。
固件更新协议分析
通过修改这些功能,我发现只要我在手机上启用NFC,就可以通过Logcat追踪固件更新过程。通过过滤这些数据,我就能够获得更新过程中每个方面的完整视图。
通过这个日志,可以轻松看出更新是如何进行的。它使用了一个四个字节的头部,然后是有效载荷数据。
0x00:命令类型
0x01:命令
0x02-0x03: 有效载荷大小
0x04-0x100:有效载荷数据
我还注意到,每次交替命令都会设置传输的第一个字节的高位。
S3FWRN5固件文件分析
在考察了这些更新的细节后,我进一步深入研究了更新文件。在此过程中,我们看出了到哪些部分是元数据,哪些部分是值得研究的模拟更新。
我注意到一个明显的日期戳(图中用红色高亮显示),其后可能是一个版本号,然后是一些地址信息,这很可能是与该文件相关的元数据。
在绿色的方框中,我注意到了大量的高熵字节,这很可能是一个加密签名,它的起始地址在元数据中被注明。签名的存在意味着这不仅仅需要进行逆向工程,同时还需要绕过签名机制。
最后,在蓝色的方框中,我注意到了这些数据更趋向一致,所以,这很可能是固件的起始地址。通过查看更新中发送的命令,也证实了这一点。这个固件代码的低熵意味着它也是未加密的。
确定CPU的架构
如果能够了解固件的架构的候,对我们的进展将会非常有利。由于这是一个原始的二进制文件,因此没有提供有关架构的任何细节或关于芯片的任何其他信息。根据我的猜测,该芯片很可能采用了8051架构,因为该架构经常在嵌入式NFC芯片中被发现;或者是ARM Thumb架构,因为这是近年来嵌入式芯片组中最常用的架构。
所以,我决定先检查是是否为Thumb的代码,因为它有一个速记符,可以马上帮助我们了解该判断是否正确。Thumb中一个常见的操作是“BX LR”,这个操作用于在函数中返回没有推送或弹出任何寄存器的链接寄存器的分支。由于这种操作的性质,在Thumb固件中会大量出现。“BX LR”的操作码是0x70 0x47,用ASCII码表示为“pG”。通过在二进制文件上运行strings命令,并查找这个值,你可以很容易地判断一个芯片是否使用Thumb代码。幸运的是,就这里来耍,它确实在使用Thumb代码。
这真是太好了。首先,这意味着该芯片很可能会利用Cortex-M风格或Securcore架构。这些都是基于ARM的架构,有明确的标准。此外,Thumb代码比其他常见的嵌入式架构的代码更易于分析、逆向和修改。
小结

❹ 如何编译一个内核

一、 下载新内核的源代码

目前,在Internet上提供Linux源代码的站点有很多,读者可以选择一个速度较快的站点下载。笔者是从站点www.kernelnotes.org上下载了Linux的最新开发版内核2.3.14的源代码,全部代码被压缩到一个名叫Linux-2.3.14.tar.gz的文件中。

二、 释放内核源代码

由于源代码放在一个压缩文件中,因此在配置内核之前,要先将源代码释放到指定的目录下。首先以root帐号登录,然后进入/usr/src子目录。如果用户在安装Linux时,安装了内核的源代码,则会发现一个linux-2.2.5的子目录。该目录下存放着内核2.2.5的源代码。此外,还会发现一个指向该目录的链接linux。删除该连接,然后将新内核的源文件拷贝到/usr/src目录中。

(一)、用tar命令释放内核源代码

# cd /usr/src

# tar zxvf Linux-2.3.14.tar.gz

文件释放成功后,在/usr/src目录下会生成一个linux子目录。其中包含了内核2.3.14的全部源代码。

(二)、将/usr/include/asm、/usr/inlude/linux、/usr/include/scsi链接到/usr/src/linux/include目录下的对应目录中。

# cd /usr/include

# rm -Rf asm linux

# ln -s /usr/src/linux/include/asm-i386 asm

# ln -s /usr/src/linux/include/linux linux

# ln -s /usr/src/linux/include/scsi scsi

(三)、删除源代码目录中残留的.o文件和其它从属文件。

# cd /usr/src/linux

# make mrproper

三、 配置内核

(一)、启动内核配置程序。

# cd /usr/src/linux

# make config

除了上面的命令,用户还可以使用make menuconfig命令启动一个菜单模式的配置界面。如果用户安装了X window系统,还可以执行make xconfig命令启动X window下的内核配置程序。

(二)、配置内核

Linux的
内核配置程序提供了一系列配置选项。对于每一个配置选项,用户可以回答"y"、"m"或"n"。其中"y"表示将相应特性的支持或设备驱动程序编译进内
核;"m"表示将相应特性的支持或设备驱动程序编译成可加载 模块,在需要时,可由系统或用户自行加入到内核中去;"n"表示内核不提供相应特性或驱动程序
的支持。由于内核的配置选项非常多,本文只介绍一些比较重要的选项。

1、Code maturity level options(代码成熟度选项)

Prompt for development and/or incomplete code/drivers
(CONFIG_EXPERIMENTAL) [N/y/?]
如果用户想要使用还处于测试阶段的代码或驱动,可以选择“y”。如果想编译出一个稳定的内核,则要选择“n”。

1、 Processor type and features(处理器类型和特色)

(1)、Processor family (386, 486/Cx486, 586/K5/5x86/6x86, Pentium/K6/TSC, PPro/6x86MX) [PPro/6x86MX] 选择处理器类型,缺省为Ppro/6x86MX。

(2)、Maximum Physical Memory (1GB, 2GB) [1GB] 内核支持的最大内存数,缺省为1G。

(3)、Math emulation (CONFIG_MATH_EMULATION) [N/y/?] 协处理器仿真,缺省为不仿真。

(4)、MTRR (Memory Type Range Register) support (CONFIG_MTRR) [N/y/?]

选择该选项,系统将生成/proc/mtrr文件对MTRR进行管理,供X server使用。

(5)、Symmetric multi-processing support (CONFIG_SMP) [Y/n/?] 选择“y”,内核将支持对称多处理器。

2、 Loadable mole support(可加载模块支持)

(1)、Enable loadable mole support (CONFIG_MODULES) [Y/n/?] 选择“y”,内核将支持加载模块。

(2)、Kernel mole loader (CONFIG_KMOD) [N/y/?] 选择“y”,内核将自动加载那些可加载模块,否则需要用户手工加载。

3、 General setup(一般设置)

(1)、Networking support (CONFIG_NET) [Y/n/?] 该选项设置是否在内核中提供网络支持。

(2)、PCI support (CONFIG_PCI) [Y/n/?] 该选项设置是否在内核中提供PCI支持。

(3)、PCI access mode (BIOS, Direct, Any) [Any] 该选项设置Linux探测PCI设备的方式。选择“BIOS”,Linux将使用BIOS;选择“Direct”,Linux将不通过BIOS;选择“Any”,Linux将直接探测PCI设备,如果失败,再使用BIOS。

(4)Parallel port support (CONFIG_PARPORT) [N/y/m/?] 选择“y”,内核将支持平行口。

4、 Plug and Play configuration(即插即用设备支持)

(1)、Plug and Play support (CONFIG_PNP) [Y/m/n/?] 选择“y”,内核将自动配置即插即用设备。

(2)、ISA Plug and Play support (CONFIG_ISAPNP) [Y/m/n/?] 选择“y”,内核将自动配置基于ISA总线的即插即用设备。

5、 Block devices(块设备)

(1)、Normal PC floppy disk support (CONFIG_BLK_DEV_FD) [Y/m/n/?] 选择“y”,内核将提供对软盘的支持。

(2)、Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (CONFIG_BLK_DEV_IDE) [Y/m/n/?] 选择“y”,内核将提供对增强IDE硬盘、CDROM和磁带机的支持。

6、 Networking options(网络选项)

(1)、Packet socket (CONFIG_PACKET) [Y/m/n/?] 选择“y”,一些应用程序将使用Packet协议直接同网络设备通讯,而不通过内核中的其它中介协议。

(2)、Network firewalls (CONFIG_FIREWALL) [N/y/?] 选择“y”,内核将支持防火墙。

(3)、TCP/IP networking (CONFIG_INET) [Y/n/?] 选择“y”,内核将支持TCP/IP协议。

(4)The IPX protocol (CONFIG_IPX) [N/y/m/?] 选择“y”,内核将支持IPX协议。

(5)、Appletalk DDP (CONFIG_ATALK) [N/y/m/?] 选择“y”,内核将支持Appletalk DDP协议。

8、SCSI support(SCSI支持)

如果用户要使用SCSI设备,可配置相应选项。

9、Network device support(网络设备支持)

Network device support (CONFIG_NETDEVICES) [Y/n/?] 选择“y”,内核将提供对网络驱动程序的支持。

10、Ethernet (10 or 100Mbit)(10M或100M以太网)

在该项设置中,系统提供了许多网卡驱动程序,用户只要选择自己的网卡驱动就可以了。此外,用户还可以根据需要,在内核中加入对FDDI、PPP、SLIP和无线LAN(Wireless LAN)的支持。

11、Character devices(字符设备)

(1)、Virtual terminal (CONFIG_VT) [Y/n/?] 选择“y”,内核将支持虚拟终端。

(2)、Support for console on virtual terminal (CONFIG_VT_CONSOLE) [Y/n/?]

选择“y”,内核可将一个虚拟终端用作系统控制台。

(3)、Standard/generic (mb) serial support (CONFIG_SERIAL) [Y/m/n/?]

选择“y”,内核将支持串行口。

(4)、Support for console on serial port (CONFIG_SERIAL_CONSOLE) [N/y/?]

选择“y”,内核可将一个串行口用作系统控制台。

12、Mice(鼠标)

PS/2 mouse (aka "auxiliary device") support (CONFIG_PSMOUSE) [Y/n/?] 如果用户使用的是PS/2鼠标,则该选项应该选择“y”。

13、Filesystems(文件系统)

(1)、Quota support (CONFIG_QUOTA) [N/y/?] 选择“y”,内核将支持磁盘限额。

(2)、Kernel automounter support (CONFIG_AUTOFS_FS) [Y/m/n/?] 选择“y”,内核将提供对automounter的支持,使系统在启动时自动 mount远程文件系统。

(3)、DOS FAT fs support (CONFIG_FAT_FS) [N/y/m/?] 选择“y”,内核将支持DOS FAT文件系统。

(4)、ISO 9660 CDROM filesystem support (CONFIG_ISO9660_FS) [Y/m/n/?]

选择“y”,内核将支持ISO 9660 CDROM文件系统。

(5)、NTFS filesystem support (read only) (CONFIG_NTFS_FS) [N/y/m/?]

选择“y”,用户就可以以只读方式访问NTFS文件系统。

(6)、/proc filesystem support (CONFIG_PROC_FS) [Y/n/?] /proc是存放Linux系统运行状态的虚拟文件系统,该项必须选择“y”。

(7)、Second extended fs support (CONFIG_EXT2_FS) [Y/m/n/?] EXT2是Linux的标准文件系统,该项也必须选择“y”。

14、Network File Systems(网络文件系统)

(1)、NFS filesystem support (CONFIG_NFS_FS) [Y/m/n/?] 选择“y”,内核将支持NFS文件系统。

(2)、SMB filesystem support (to mount WfW shares etc.) (CONFIG_SMB_FS)

选择“y”,内核将支持SMB文件系统。

(3)、NCP filesystem support (to mount NetWare volumes) (CONFIG_NCP_FS)

选择“y”,内核将支持NCP文件系统。

15、Partition Types(分区类型)

该选项支持一些不太常用的分区类型,用户如果需要,在相应的选项上选择“y”即可。

16、Console drivers(控制台驱动)

VGA text console (CONFIG_VGA_CONSOLE) [Y/n/?] 选择“y”,用户就可以在标准的VGA显示方式下使用Linux了。

17、Sound(声音)

Sound card support (CONFIG_SOUND) [N/y/m/?] 选择“y”,内核就可提供对声卡的支持。

18、Kernel hacking(内核监视)

Magic SysRq key (CONFIG_MAGIC_SYSRQ) [N/y/?] 选择“y”,用户就可以对系统进行部分控制。一般情况下选择“n”。

四、 编译内核

(一)、建立编译时所需的从属文件

# cd /usr/src/linux

# make dep

(二)、清除内核编译的目标文件

# make clean

(三)、编译内核

# make zImage

内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件zImage。如果编译的内核很大的话,系统会提示你使用make bzImage命令来编译。这时,编译程序就会生成一个名叫bzImage的内核映像文件。

(四)、编译可加载模块

如果用户在配置内核时设置了可加载模块,则需要对这些模块进行编译,以便将来使用insmod命令进行加载。

# make moles

# make modelus_install

编译成功后,系统会在/lib/moles目录下生成一个2.3.14子目录,里面存放着新内核的所有可加载模块。

五、 启动新内核

(一)、将新内核和System.map文件拷贝到/boot目录下

# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.3.14

# cp /usr/src/linux/System.map /boot/System.map-2.3.14

# cd /boot

# rm -f System.map

# ln -s System.map-2.3.14 System.map

(二)、配置/etc/lilo.conf文件。在该文件中加入下面几行:

default=linux-2.3.14

image=/boot/vmlinuz-2.3.14

label=linux-2.3.14

root=/dev/hda1

read-only

(三)、使新配置生效

# /sbin/lilo

(四)、重新启动系统

# /sbin/reboot

新内核如果不能正常启动,用户可以在LILO:提示符下启动旧内核。然后查出故障原因,重新编译新内核即可。

阅读全文

与三星手机内核编译相关的资料

热点内容
屋面工程量算法 浏览:248
芭比公主动画电影36部 浏览:118
割乳房的香港电影 浏览:623
爱情片推荐 电影中国范冰冰 浏览:230
邵氏电影有多少武侠 浏览:460
pdf怎样看已加密 浏览:423
啄木鸟 电影 浏览:597
有域名和服务器和源码如何建立网站 浏览:174
php订单管理系统源码 浏览:588
母亲的职业2李采谭 浏览:31
蛇跟一个小男孩的电影 浏览:779
0855 在线 浏览:968
电影院和图书馆相邻用英语怎么说 浏览:262
韩国 三个小时以上 爱情片 浏览:158
日本韩国悬疑推理片 浏览:462
华为云通用计算型服务器主频 浏览:492
韩国爱情片网址 浏览:145
宣读军官晋升命令 浏览:856
朱艺彬的所有电影 浏览:683
李丽珍与徐锦江的电影 浏览:254