ORACLE 参数和Unix Kernal关系

本文解决因操作系统内核参数设置不当导致的Oracle启动失败问题。详细介绍了如何调整semmns等参数来避免ORA-27303等错误,并列举了与Oracle进程数相关的内核参数及其作用。
processes设置过大,就开不了ORACLE了.
ORA-27303: additional information: invalid shared ctx
ORA-27146 : post/wait initialization failed
ORA-27300: OS system dependent operation:semget failed with status: 28
ORA-27301: OS failure message: No space left on device
ORA-27302: failure occurred at: sskgpcreates

改小点就能开了.
虽然semmns已经设了1024了,看来还要加,查了一下参数和Kernel参数的关系.

db_block_buffers            shmmax
db_files (maxdatafiles)     nfile, maxfiles
large_pool_size             shmmax
log_buffer                  shmmax
processes                   nproc, semmsl, semmns
shared_pool_size            shmmax


Common Unix Kernel Parameter Definitions
The following Kernel Parameters tend to be generic across most Unix platforms:

maxfiles - Soft file limit per process.
maxuprc - Maximum number of simultaneous user processes per userid.
nfile - Maximum number of simultaneously open files systemwide at any given time.
nproc - Maximum number of processes that can exist simultaneously in the system.
shmmax - The maximum size(in bytes) of a single shared memory segment.
shmmin - The minimum size(in bytes) of a single shared memory segment.
shmmni - The number of shared memory identifiers.
shmseg - The maximum number of shared memory segments that can be attached by a process.
semmns - The number of semaphores in the system.
semmni - The number of semaphore set identifiers in the system; determines the number of semaphore sets that can be created at any one time.
semmsl - The maximum number of sempahores that can be in one semaphore set. It should be same size as maximum number of Oracle processes.


最容易出错的是semmns太小, Solaris也比HP-UNIX容易暴掉。

原来semmns=1024, 可以开一个R12,2个9i,一个10g, 再看9i就不行了, 变2048,一切正常, semmsl最好也改一下。

<think>好的,我现在需要准备关于U-Boot内核移植的面试问题。首先,我应该回顾一下之前用户提供的技术要点总结,确保自己理解其中的核心步骤关键点。 用户之前给出的回答分为U-Boot移植Linux内核裁剪两部分,每个部分都有具体的步骤、命令示例以及常见问题处理。现在用户问的是关于ubootkernel移植的面试回答,可能需要更综合性的概述,同时结合可能的面试问题。 首先,我需要确认U-Boot移植的主要流程。包括硬件适配、编译配置、启动调试问题处理。硬件适配部分需要了解目标板的CPU架构、外设配置,比如时钟、DDR、串口等。编译配置涉及选择defconfig,使用menuconfig调整,交叉编译工具链的设置。启动流程的调试可能需要查看串口输出的阶段信息,比如SPL阶段、DRAM初始化等。常见问题如DDR参数错误、时钟配置错误环境变量存储设置。 然后是内核移植,这部分可能包括配置系统的使用(如make menuconfig),裁剪策略,模块化处理,启动优化。裁剪策略需要了解如何移除不必要的驱动功能,模块化处理将部分驱动编译为模块以减少内核体积。启动优化可能涉及压缩方式的选择、日志级别的调整延迟初始化。 另外,用户之前的回答提到了关联技术要点,如U-Boot与内核的启动参数传递、镜像格式验证,以及系统完整性验证的方法,如启动时间测量、存储空间对比稳定性测试。高频面试问题示例也需要注意,比如如何确定驱动是否可以裁剪,U-Boot移植时的链接错误处理,内核裁剪后网络问题的排查方法。 在思考过程中,需要注意面试回答的结构是否清晰,是否覆盖了移植的关键步骤、常见问题及解决方法,以及实际项目经验。可能需要举例说明在具体项目中如何操作,遇到的问题解决方式,以及取得的成果,比如启动时间的优化,内核体积的减少等。 可能还需要考虑面试官会深入询问的技术细节,例如U-Boot的启动流程,从SPL到加载内核的过程,或者内核配置中依赖关系的处理,如何确保裁剪后的内核不丢失必要功能。此外,交叉编译工具链的选择配置也是一个重要点,需要说明如何正确设置环境变量,如CROSS_COMPILE。 需要确保回答中提到的命令配置选项准确无误,例如在U-Boot编译时使用的make命令参数,内核配置中的具体CONFIG选项。同时,要强调调试方法,比如通过串口日志定位问题,使用工具分析启动过程等。 在项目经验部分,需要具体化,比如提到在某项目中移植U-Boot到某个具体型号的处理器,解决了某个具体问题(如DDR初始化失败),或者裁剪内核后体积减少了多少,启动时间提升了多少。这些数据能增加回答的可信度。 另外,要注意高频问题的回答示例,如遇到未定义的引用错误时,如何检查工具链版本链接脚本,或者内核网络问题需要逐层排查驱动协议栈配置。这些问题需要提前准备,确保回答有条理,展示出系统的问题解决能力。 最后,确保整个回答结构清晰,分点明确,技术术语正确,同时用简洁的中文表达,避免冗长,突出重点。可能需要将内容分为U-Boot移植、内核移植、关联技术、常见问题及项目经验几个部分,每个部分用简短的说明示例支持。</think>以下是对U-BootLinux内核移植的面试回答框架,包含技术要点实战经验描述: --- ### **一、U-Boot移植核心要点** #### 1. **移植流程** - **硬件适配** - 确认处理器架构(如ARMv7、ARMv8),添加板级支持包(`board/<vendor>/<board>`目录) - 初始化关键硬件:DDR控制器、时钟树、串口调试终端、存储介质(eMMC/NAND) - 示例:为新板卡添加`board/freescale/myboard`,实现`board_init()``dram_init()`函数 - **编译配置** ```bash # 选择基础配置模板 make myboard_defconfig # 图形化配置(使能/禁用功能) make menuconfig # 编译生成u-boot.bin make CROSS_COMPILE=aarch64-linux-gnu- -j8 ``` - **启动调试** - 通过串口输出定位故障阶段: ```bash U-Boot SPL 2023.07-rc1 # SPL阶段正常 Trying to boot from MMC # 存储设备检测 DRAM: 1 GiB # DDR初始化成功 ``` #### 2. **高频问题处理** - **DDR初始化失败**:调整`dram_init()`中的时序参数(tRFC、CL值) - **环境变量丢失**:检查`CONFIG_ENV_OFFSET`是否正确设置偏移地址 - **镜像加载异常**:验证U-Boot支持的镜像格式(如`bootm`加载zImage,`booti`加载Image) --- ### **二、Linux内核移植核心要点** #### 1. **移植流程** - **基础配置** ```bash # 选择默认配置(如imx_v7_defconfig) make ARCH=arm imx_v7_defconfig # 图形化配置 make ARCH=arm menuconfig # 编译内核与设备树 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage dtbs -j8 ``` - **驱动裁剪策略** - **必保留**:CPU调度、中断控制器、时钟源、串口驱动、存储驱动 - **可裁剪**: ```bash # 移除触摸屏驱动 CONFIG_INPUT_TOUCHSCREEN=n # 禁用USB子系统 CONFIG_USB_SUPPORT=n # 关闭调试符号(节省30%空间) CONFIG_DEBUG_INFO=n ``` #### 2. **启动优化技巧** - **压缩方式**:使用LZ4替换gzip(解压速度提升50%) - **静默启动**:添加内核参数`quiet loglevel=0` - **模块延迟加载**:将非关键驱动(如USB、声卡)编译为模块(`.ko`文件) --- ### **三、关联技术衔接** #### 1. **U-Boot与内核交互** - **启动参数传递**: ```bash # 设置根文件系统位置 setenv bootargs 'root=/dev/mmcblk0p2 rw console=ttyS0,115200' # 加载内核设备树 fatload mmc 0:1 0x82000000 zImage fatload mmc 0:1 0x83000000 imx6q-board.dtb bootz 0x82000000 - 0x83000000 ``` #### 2. **系统验证方法** - **启动耗时分析**: ```bash # 内核启动时间戳(dmesg输出) [ 0.000000] Kernel command line: init=/init earlyprintk [ 1.235678] Freeing unused kernel memory: 1024K ``` - **最小系统验证**: 通过`init=/bin/sh`启动到最小shell环境,验证基础功能(挂载根文件系统、运行基础命令) --- ### **四、高频面试问题示例** #### 1. **Q:U-Boot如何加载设备树(DTB)?** **A**:通过`fatload`等命令将DTB加载到内存,`bootz`命令格式为: ```bash bootz <kernel_addr> - <dtb_addr> ``` #### 2. **Q:内核启动卡在"Starting kernel..."怎么办?** **A**:按优先级检查: - 内核镜像格式是否正确(ARM32用zImage,ARM64用Image) - 设备树地址是否传递正确(通过`fdt addr`命令验证) - 控制台参数(`console=`)是否与硬件匹配 #### 3. **Q:如何验证裁剪后的内核是否完整?** **A**:通过三级测试: - Level 1:启动到控制台,执行`ls /proc/device-tree`确认设备树解析 - Level 2:挂载根文件系统,运行基本命令(ifconfig、mount) - Level 3:压力测试(内存:`memtester`,存储:`dd`读写测试) --- ### **五、项目经验示例** **智能电表项目(基于i.MX6ULL)** 1. **U-Boot移植** - 解决eMMC驱动不兼容问题:修改`drivers/mmc/fsl_esdhc.c`的时钟分频算法 - 优化启动速度:SPL阶段跳过冗余设备扫描,启动时间从3.2秒缩短至1.8秒 2. **内核裁剪** - 从原生4.1.15内核(12MB)裁剪至2.3MB - 保留关键功能:硬件加密引擎驱动(`CONFIG_CRYPTO_DEV_FSL_CAAM`)、看门狗 3. **成果**:通过EMC电磁兼容测试,达到工业级-40℃~85℃运行要求 --- **回答建议**:根据目标岗位调整侧重点: - 嵌入式底层开发:强调硬件调试、启动优化经验 - 系统架构岗位:突出整体移植方法论稳定性设计 - IoT领域:重点描述低功耗配置无线驱动适配经验
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值